JDK 11 Ошибка SSL в действующем сертификате (работает в предыдущих версиях) - PullRequest
0 голосов
/ 25 августа 2018

Следующий код выдает ошибку в JDK 11:

    HttpURLConnection con = (HttpURLConnection) new URL("https://sis.redsys.es/sis/realizarPago").openConnection();
    con.setRequestMethod("GET");
    con.getResponseCode();

Ошибка:

javax.net.ssl.SSLHandshakeException: extension (10) should not be presented in server_hello
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128)
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:312)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:268)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:259)
at java.base/sun.security.ssl.SSLExtensions.<init>(SSLExtensions.java:71)
at java.base/sun.security.ssl.ServerHello$ServerHelloMessage.<init>(ServerHello.java:169)
at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.consume(ServerHello.java:860)
at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:390)
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:445)
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:422)
at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:178)
at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164)
at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:877)
at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:810)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:383)
at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567)

Это работало в любом предыдущем JDK (я тестировал в 7,8, 9 и 10).

Сертификат кажется действительным, так как он распознается браузерами или большинством тестов SSL, которые я обнаружил в Интернете.

Я пытался отключить проверку имени хоста, отключить cacerts, добавить DigiCert к cacertsфайл без везения.

Похоже, ошибка в openJDK.Протестировано в сборках 26, 27 и 28 (релиз-кандидат).

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Теперь это решено в JDK 11.0.2, выпущенном 16 января 2019 года

0 голосов
/ 28 августа 2018

В настоящее время проблема решена в JDK 12 https://bugs.openjdk.java.net/browse/JDK-8209965, и включена в ea-9.

Обратный порт в JDK 11 также был разрешен https://bugs.openjdk.java.net/browse/JDK-8210005 и включен в

  • 11.0.3 (Oracle JDK)
  • 11.0.2 (OpenJDK)

Некоторые предпосылки для этого можно найти в комментариях здесь https://github.com/openssl/openssl/pull/4463/files

TLS 1.3 добавляет схему для сервера, чтобы указать клиенту свой список поддерживаемых групп в Сообщение EncryptedExtensions, но не соответствующее Спецификации позволяют отправлять поддерживаемые группы в ServerHello.

Тем не менее (возможно, из-за непосредственной близости к расширение "ec_point_formats", которое разрешено в ServerHello), Есть несколько серверов, которые отправляют это расширение в ServerHello в любом случае.

До версии 1.1.0 включительно, мы не проверяли наличие недопустимых расширений, поэтому, чтобы избежать регрессии, мы должны разрешить это расширение в TLS 1.2 Server также привет.

...