javax.net.ssl.SSLException: PSK недоступен. Невозможно возобновить

Я использую клиент 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 здесь, но мне интересно: что на самом деле означает сообщение об ошибке? Что-то не так в моей среде или ошибка означает, что Jetty неправильно настраивает соединение?


person Gili    schedule 30.09.2018    source источник
comment
Нет доступных PSK означает, что был сеанс TLS, который можно было возобновить, но не было предварительного общего ключа. Это вызовет предупреждение INTERNAL_ERROR на стороне реализации OpenJDK. Итак, возможно, у вас есть сервер, создающий несовместимый блок ServerHello ??   -  person Joakim Erdfelt    schedule 01.10.2018


Ответы (2)


в JDK 11 есть ошибка: https://bugs.openjdk.java.net/browse/JDK-8213202

вы должны либо:

  • дождитесь выхода JDK 12
  • обновление до JDK 11.0.3+, которое включает бэкпорт
  • или используйте этот параметр командной строки в качестве обходного пути: -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2
person Adam from WALCZAK.IT    schedule 20.01.2019

Поскольку ответ Адама из WALCZAK.IT не сработал для меня, я обнаружил, что окончательное решение состоит в том, чтобы добавить TLSv1.3 в файл jdk.tls.disabledAlgorithms в файле java.security в conf в вашем каталоге java.

Итак, откройте java.security под %JAVA_HOME%\conf, найдите jdk.tls.disabledAlgorithms и добавьте , TLSv1.3.

person balsick    schedule 09.06.2020
comment
Это сработало для меня для версии JDK jdk-11.0.2.jdk - person KunalMZ; 04.02.2021