Произвольно SSLException Неподдерживаемая версия записи Unknown-0.0

Иногда код ниже дает сбой, а иногда это работает. Я использую Java8. Это проблема на стороне сервера?

Исключение в потоке "main" javax.net.ssl.SSLException: Неподдерживаемая версия записи Unknown-0.0.

РЕДАКТИРОВАТЬ: Я понижаю до JDK7 с JDK8, и это работает. Единственное найденное мной решение, которое работает.

public static void main(String[] args) throws Exception {
    URL u = new URL("https://c********.web.cddbp.net/webapi/xml/1.0/");
    HttpURLConnection connection = (HttpURLConnection) u.openConnection();
    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setInstanceFollowRedirects(false);
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "text/plain");
    connection.setRequestProperty("charset", "utf-8");
    connection.setRequestProperty("Content-Length", "" + 140);
    connection.setUseCaches(false);
    DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
}

5 ответов

Я получил то же сообщение об ошибке в новой установке Java при попытке использовать соединение SSL, которое обеспечивает 256-битное шифрование. Чтобы решить проблему, я обнаружил, что мне нужно было установить файлы политики неограниченной юрисдикции расширения криптографии Java (JCE) (например, http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html)

У меня была эта строка

    SSLContext sc = SSLContext.getInstance("SSL");

Пришлось изменить его на

    SSLContext sc = SSLContext.getInstance("TLSv1");

И теперь это работает как на Java 7 и Java 8

Примечание: (В Java 7 SSL и TLS оба работали с одним и тем же URL-адресом, в Java 8 просто пробовал TLSv1, но я думаю, SSLv1 также работает)

Загрузите файлы политики юрисдикции с неограниченной надежностью Java Cryptography Extension (JCE) в соответствии с вашей версией JDK/JRE и поместите их в папку lib/security

По умолчанию Java Cryptographic Extension ограничен в использовании функций и алгоритмов доступа. Нам нужно сделать его неограниченным.

Согласно трассировке стека, RecordVersion Unknow-0.0 создается отсюда=> ссылка отсюда =>, которая вызывается в InputRecord.readV3Record

в большинстве случаев эти два значения не должны быть равны 0, причина этого, вероятно, заключается в неправильном ответе сервера во время установления связи.

(Это не ответ, а просто некоторая информация для облегчения выяснения проблемы и решения)

Эта ошибка исправлена ​​в последних версиях jre, просто обновите версию jre. Эта проблема вызвана SNI

Другие вопросы по тегам