Случайно 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());
}

person daniele.guiducci    schedule 27.04.2014    source источник
comment
У меня не получилось воспроизвести, но не было JDK8. Рад, что это работает в JDK7.   -  person cweichen    schedule 29.04.2014
comment
Да, эта проблема часто возникает с JDK8, а не с JDK7.   -  person daniele.guiducci    schedule 29.04.2014


Ответы (4)


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

person Michael O'Connor    schedule 28.08.2014
comment
Достаточно справедливо предоставить средство, которое может помочь некоторым, но оно не объясняет подробно, что на самом деле вызывает случайность его ошибки. Я столкнулся именно с этой проблемой с последними версиями JDK и JCE, применяемыми в нашей производственной среде, поэтому я не вижу в этом решения. - person JavaJedi; 02.02.2017

у меня была эта линия

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

Пришлось поменять на

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

И теперь он работает как на java 7, так и на java 8.

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

person Peter Escamilla    schedule 13.05.2015

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

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

person rts    schedule 18.08.2020
comment
Итак, мы делаем его неограниченным, добавляя эти файлы? - person ssavva05; 14.10.2020
comment
да, @ssavva05, если ошибка по-прежнему сохраняется, перейдите либо к обновлению jre, либо к понижению текущей версии. - person rts; 15.10.2020

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

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

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

person Valen    schedule 11.04.2016