javax.net.ssl.SSLHandshakeException:没有可用的认证方案

时间:2019-04-25 17:40:30

标签: ssl java-11

一个Google揭示了jdk11.0.2中的错误,但我升级到jdk11.0.3,但对我来说仍然存在。复制步骤

  1. git clone https://github.com/deanhiller/webpieces.git
  2. 将行“ org.gradle.java.home = / Library / Java / JavaVirtualMachines / jdk-11.0.3.jdk / Contents / Home”添加到〜/ .gradle / gradle.properties以将jdk设置为11.0.3
  3. 从Webpieces目录运行./gradlew:core:core-asyncserver:test

测试用例挂起并在日志中显示

由于:javax.net.ssl.SSLHandshakeException:没有可用的身份验证方案     在java.base / sun.security.ssl.Alert.createSSLException(Alert.java:128)     在java.base / sun.security.ssl.Alert.createSSLException(Alert.java:117)     在java.base / sun.security.ssl.TransportContext.fatal(TransportContext.java:308)     在java.base / sun.security.ssl.TransportContext.fatal(TransportContext.java:264)     在java.base / sun.security.ssl.TransportContext.fatal(TransportContext.java:255)     在java.base / sun.security.ssl.CertificateMessage $ T13CertificateProducer.onProduceCertificate(CertificateMessage.java:945)     在java.base / sun.security.ssl.CertificateMessage $ T13CertificateProducer.produce(CertificateMessage.java:934)     在java.base / sun.security.ssl.SSLHandshake.produce(SSLHandshake.java:436)     在java.base / sun.security.ssl.ClientHello $ T13ClientHelloConsumer.goServerHello(ClientHello.java:1224)     在java.base / sun.security.ssl.ClientHello $ T13ClientHelloConsumer.consume(ClientHello.java:1160)     在java.base / sun.security.ssl.ClientHello $ ClientHelloConsumer.onClientHello(ClientHello.java:849)     在java.base / sun.security.ssl.ClientHello $ ClientHelloConsumer.consume(ClientHello.java:810)     在java.base / sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)     在java.base / sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)     在java.base / sun.security.ssl.SSLEngineImpl $ DelegatedTask $ DelegatedAction.run(SSLEngineImpl.java:1065)     在java.base / sun.security.ssl.SSLEngineImpl $ DelegatedTask $ DelegatedAction.run(SSLEngineImpl.java:1052)     在java.base / java.security.AccessController.doPrivileged(本机方法)     在java.base / sun.security.ssl.SSLEngineImpl $ DelegatedTask.run(SSLEngineImpl.java:999)     在org.webpieces.ssl.impl.AsyncSSLEngine2Impl.createRunnable(AsyncSSLEngine2Impl.java:94)     ...省略了12个共同的框架

我应该提交另一个jdk错误,该错误仍然不起作用或任何人有任何想法吗?

已解决/相关的

jdk错误:https://bugs.openjdk.java.net/browse/JDK-8211426

请注意,由于某种原因此修复程序         System.setProperty(“ jdk.tls.server.protocols”,“ TLSv1.2”);

hmmm,有人知道如何生成适用于TLSv1.2和TLSv1.3的自签名证书吗?

1 个答案:

答案 0 :(得分: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