【问题标题】:javax.net.ssl.SSLException: No PSK available. Unable to resumejavax.net.ssl.SSLException:没有可用的 PSK。无法恢复
【发布时间】:2019-03-05 13:21:03
【问题描述】:

我正在使用 Jetty 客户端发送传出请求。在 Java 10 下完美运行的代码在 Java 11 下突然出现如下异常:

javax.net.ssl.SSLException: No PSK available. Unable to resume.
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:129)
    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.ServerHello$T13ServerHelloConsumer.consume(ServerHello.java:1224)
    at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.onServerHello(ServerHello.java:984)
    at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.consume(ServerHello.java:872)
    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.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.fill(SslConnection.java:511)
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:128)
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:73)
    at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:133)
    at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:155)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:411)
    at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:305)
    at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:159)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)

我向 Jetty here 提交了错误报告,但我想知道:错误消息的实际含义是什么?是我的环境有问题还是错误意味着 Jetty 没有配置连接正确吗?

【问题讨论】:

  • “没有 PSK 可用”表示存在可以恢复的 TLS 会话,但不存在预共享密钥。这将在 OpenJDK 实现端触发 INTERNAL_ERROR 警报。所以也许你有一个服务器产生了一个不兼容的 ServerHello 块??

标签: ssl networking java-11


【解决方案1】:

JDK 11 中存在一个错误:https://bugs.openjdk.java.net/browse/JDK-8213202

你必须:

  • 等待 JDK 12 发布
  • 更新到 JDK 11.0.3+,包括 backport
  • 或使用此命令行参数作为解决方法:-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2

【讨论】:

【解决方案2】:

由于来自 WALCZAK.IT 的 Adam 的回答对我不起作用,我发现最终的解决方案是将 TLSv1.3 添加到 java 目录下 conf 下 java.security 文件中的 jdk.tls.disabledAlgorithms 中。

所以,打开 %JAVA_HOME%\conf 下的 java.security,找到 jdk.tls.disabledAlgorithms 并附加 , TLSv1.3

【讨论】:

  • 这对我来说适用于 JDK 版本“jdk-11.0.2.jdk”
【解决方案3】:

我找到了一个适合我的解决方案,将其添加到您的 gradle.properties 中。

Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2
JAVA_TOOL_OPTIONS=-Dhttps.protocols=TLSv1.2
systemProp.http.proxyHost=fodev.org
systemProp.http.proxyPort=8118
systemProp.http.nonProxyHosts=*.jitpack.io, *.maven.org
systemProp.https.proxyHost=fodev.org
systemProp.https.proxyPort=8118
systemProp.https.nonProxyHosts=*.jitpack.io, *.maven.org

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 2022-07-29
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    相关资源
    最近更新 更多