Ошибка рукопожатия связи Java SSL с openjdk 1.8 - PullRequest
2 голосов
/ 26 сентября 2019

У меня есть Java-программа, которая использует RESTTemplate для связи со службой.Я использую сертификат клиента для связи с сервером.Получение следующей ошибки

main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
19:53:13.851 [main] DEBUG org.apache.http.impl.conn.DefaultManagedHttpClientConnection - http-outgoing-0: Shutdown connection
19:53:13.852 [main] DEBUG org.apache.http.impl.execchain.MainClientExec - Connection discarded
19:53:13.852 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection released: [id: 0][route: {s}->https://api.entrust.net:443][total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 20]
19:53:13.854 [main] ERROR com.x.y.z.provider.a.Client - exception I/O error on GET request for "https://api.entrust.net/enterprise/v2/application/version": Received fatal alert: handshake_failure; nested exception is javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
19:53:13.858 [main] DEBUG com.x.y.z.provider.a.Client - Map the failure exception {}
org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://api.entrust.net/enterprise/v2/application/version": Received fatal alert: handshake_failure; nested exception is javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:744)
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:670)

Когда я включаю журналы отладки, я вижу, что начальное рукопожатие выполнено, но позже оно терпит неудачу со следующей ошибкой

*** CertificateVerify
Signature Algorithm SHA256withRSA
update handshake state: certificate_verify[15]
upcoming handshake states: client change_cipher_spec[-1]
upcoming handshake states: client finished[20]
upcoming handshake states: server change_cipher_spec[-1]
upcoming handshake states: server finished[20]
main, WRITE: TLSv1.2 Handshake, length = 264
update handshake state: change_cipher_spec
upcoming handshake states: client finished[20]
upcoming handshake states: server change_cipher_spec[-1]
upcoming handshake states: server finished[20]
main, WRITE: TLSv1.2 Change Cipher Spec, length = 1
*** Finished
verify_data:  { 101, 230, 249, 79, 106, 34, 167, 222, 44, 208, 111, 11 }
***

update handshake state: finished[20]
upcoming handshake states: server change_cipher_spec[-1]
upcoming handshake states: server finished[20]
**main, WRITE: TLSv1.2 Handshake, length = 40
main, READ: TLSv1.2 Alert, length = 2
main, RECV TLSv1.2 ALERT:  fatal, handshake_failure
%% Invalidated:  [Session-1, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384]**
main, called closeSocket()

Интересно, что я запускаю его на ноутбуке, он работает без проблем, но как только я запускаю его на контейнере, это вызывает ошибку рукопожатия

Я запускаю oracle jdk на ноутбуке, ноВерсия OpenJDK-1.8.0.212 на моем контейнере.В чем могут быть возможные проблемы?

В контейнере у меня действительно установлено хранилище доверенных сертификатов и хранилище ключей, и я мог видеть, что он используется, поскольку место, где происходит сбой, - это то место, которое я указал в журналах отладки SSL.

1 Ответ

0 голосов
/ 26 сентября 2019

Вариант 1.Вам необходимо добавить хранилище доверенных сертификатов / хранилище ключей в каскады контейнера или среды, в которой вы тестируете его для успешного прохождения рукопожатия.

Вариант 2.Вы можете указать своей программе прочитать местоположение файла хранилища ключей в вашем контейнере / песочнице / окружении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...