ssl - javax.net.ssl.SSLHandshakeException : No available authentication scheme

标签 ssl java-11

谷歌揭示了 jdk11.0.2 中的一个错误,但我升级到 jdk11.0.3,这对我来说仍然存在。重现步骤

  • git clone https://github.com/deanhiller/webpieces.git
  • 添加行 "org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home"~/.gradle/gradle.properties将 jdk 设置为 11.0.3
  • 运行 ./gradlew :core:core-asyncserver:test来自 webpieces 目录

  • 测试用例挂起并在日志中显示
    Caused by: javax.net.ssl.SSLHandshakeException: No available authentication scheme
        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:308)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:255)
        at java.base/sun.security.ssl.CertificateMessage$T13CertificateProducer.onProduceCertificate(CertificateMessage.java:945)
        at java.base/sun.security.ssl.CertificateMessage$T13CertificateProducer.produce(CertificateMessage.java:934)
        at java.base/sun.security.ssl.SSLHandshake.produce(SSLHandshake.java:436)
        at java.base/sun.security.ssl.ClientHello$T13ClientHelloConsumer.goServerHello(ClientHello.java:1224)
        at java.base/sun.security.ssl.ClientHello$T13ClientHelloConsumer.consume(ClientHello.java:1160)
        at java.base/sun.security.ssl.ClientHello$ClientHelloConsumer.onClientHello(ClientHello.java:849)
        at java.base/sun.security.ssl.ClientHello$ClientHelloConsumer.consume(ClientHello.java:810)
        at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)
        at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
        at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1065)
        at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1052)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:999)
        at org.webpieces.ssl.impl.AsyncSSLEngine2Impl.createRunnable(AsyncSSLEngine2Impl.java:94)
        ... 12 common frames omitted
    
    我应该提交另一个 JDK 错误,还是有人有任何想法?
    已解决/相关的 JDK 错误:https://bugs.openjdk.java.net/browse/JDK-8211426
    请注意,这出于某种原因修复了它:System.setProperty("jdk.tls.server.protocols", "TLSv1.2");嗯,有人知道如何生成适用于 TLSv1.2 和 TLSv1.3 的自签名证书吗?

    最佳答案

    假设这是相关的问题,而不是 TLS 1.3 的另一个问题。

    您的证书正在使用 DSA算法,不久前已被弃用,取而代之的是 RSA并且在 TLS1.3 中根本不支持。确保改为创建 RSA 证书。

    似乎 java keytool 的版本不太旧默认情况下可能已创建 DSA 证书……不幸的默认设置。您可以使用此命令来验证证书类型。
    openssl x509 -in certificate.crt -text

    Certificate:
        ...
        Signature Algorithm: dsa_with_SHA256
            ...
            Subject Public Key Info:
                Public Key Algorithm: dsaEncryption
    

    关于ssl - javax.net.ssl.SSLHandshakeException : No available authentication scheme,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55854904/

    相关文章:

    java - Play Framework 中 WS 调用的 SSL 问题

    使用自定义 java 运行时镜像时发生 javax.net.ssl.SSLHandshakeException 但并非没有

    ruby-on-rails - 更新 ruby​​ on rails 的 bash 错误

    java - 编译 module-info.java 抛出错误 : module not found

    java - 仅限 Mac : Could not find or load main class

    Java 11 包 javax.xml.bind 不存在

    java - 如果客户端在 keystore 中有多个证书,将选择哪个 SSL 证书

    c++ - boost asio 异常 : use_private_key_file: key values mismatch

    maven - 具有默认访问权限的类会导致 java 11 的 Spring Boot 项目在运行时出现 NoClassDefFound 错误

    java - 使用较新版本的 Java,我的一些应用程序快捷方式被 MacOS 快捷方式覆盖