繁体   English   中英

有效证书上的 JDK 11 SSL 错误(在以前的版本中工作)

[英]JDK 11 SSL Error on valid certificate (working in previous versions)

以下代码会在 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(发布候选)中测试。

该问题目前已在 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(甲骨文 JDK)
  • 11.0.2(OpenJDK)

可以在此处的评论中找到一些背景知识https://github.com/openssl/openssl/pull/4463/files

TLS 1.3 为服务器添加了一个方案,以在 EncryptedExtensions 消息中向客户端指示其支持的组列表,但相关规范均不允许在 ServerHello 中发送 supported_groups。

尽管如此(可能是由于与 ServerHello 中允许的“ec_point_formats”扩展非常接近),无论如何都有几个服务器在 ServerHello 中发送此扩展。

在 1.1.0 版本之前(包括 1.1.0 版本),我们没有检查是否存在未经许可的扩展,因此为避免回归,我们也必须在 TLS 1.2 ServerHello 中允许此扩展。

现在已在 2019 年 1 月 16 日发布的 JDK 11.0.2 中解决

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM