Произвольно 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