У нас есть Java-апплет (работающий под tomcat), который делает звонки третьим лицам.Один из них использует сертификат клиента для аутентификации.Это работало под Java 8, но мы недавно обновили систему до Java 11, и она больше не работает.Ошибка:
Неподдерживаемое сообщение о рукопожатии: server_hello_done
(что странно, поскольку я думал, что server_hello_done была допустимой частью рукопожатия)
У нас возникла проблема с хранилищем ключей Java после обновления.Служба не смогла сказать, что это не был действительный поток PCKS12.Перечисление содержимого с помощью keytool сработало, но с предупреждением
Предупреждение:
Хранилище ключей JKS использует собственный формат.Рекомендуется перейти на PKCS12, который является отраслевым стандартным форматом, используя "keytool -importkeystore -srckeystore / path / to / keystore -destkeystore / path / to / keystore -deststoretype pkcs12"
Мы использовалипредложила команду и теперь она открывает хранилище ключей, но мы получаем ошибку квитирования.
Трассировка стека к нашему коду:
Unsupported handshake message: server_hello_done
javax.net.ssl.SSLProtocolException: Unsupported handshake message: server_hello_done
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:126)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:321)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:446)
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:421)
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:1152)
at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1063)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:396)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
Мы используем http-клиент apache (org.apache.http.impl.client.CloseableHttpClient).Следующая строка в трассировке стека - это просто вызов client.execute()
в нашем коде.
Он также включает
Caused by: java.lang.UnsupportedOperationException: Not supported yet.
at java.base/sun.security.ssl.HandshakeHash$CloneableHash.archived(HandshakeHash.java:616)
at java.base/sun.security.ssl.HandshakeHash$T12HandshakeHash.archived(HandshakeHash.java:546)
at java.base/sun.security.ssl.HandshakeHash.archived(HandshakeHash.java:188)
at java.base/sun.security.ssl.CertificateVerify$T12CertificateVerifyMessage.<init>(CertificateVerify.java:581)
at java.base/sun.security.ssl.CertificateVerify$T12CertificateVerifyProducer.produce(CertificateVerify.java:740)
at java.base/sun.security.ssl.SSLHandshake.produce(SSLHandshake.java:436)
at java.base/sun.security.ssl.ServerHelloDone$ServerHelloDoneConsumer.consume(ServerHelloDone.java:173)
at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
Третья сторона подтверждает, что они не видят "общий шифр" в своихжурналы, но говорят, что они поддерживают широкий диапазон шифров ( "SSL3, TLS 1.0, 1.1 или 1.2. Шифры помечены как ВЫСОКИЙ: СРЕДНИЙ:! aNULL:! eNULL: @STRENGTH" ).Я думаю, что мы поддерживаем большую часть этого, кроме SSL3.Насколько я знаю, у нас есть настройки по умолчанию в Java 11 для таких.Пробовал активировать SSLv3 временно, но не смог подключиться (хотя с тех пор, как попытался не установить соединение с этой машины вообще (время ожидания) даже после возврата, так что, может быть, это мало что говорит - я пробовал с тестовой машины, а не рабочей длячто).
Есть идеи?Я на правильных линиях, чтобы продолжать смотреть на шифры, или я что-то упускаю?