У меня проблема с ssl handshake_failure.Появилась новая интеграция с внешним веб-сервисом, который требуется для связи через Https, они предоставляют мне три сертификата (root + shared + client), поэтому я установил все три сертификата в свой JDK, и когда я пытаюсь вызвать этот веб-сервис, я всегда получаюисключение:
exception is javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
, поэтому я отследил рукопожатие между мной и сервером, добавив это свойство -Djavax.net.debug = all в мое приложение
Я нашелчто все три сертификата загружаются в приложение после его запуска
adding as trusted cert:
Subject: CN=EXA Root CA, OU=EXA eTrust Center, O=EXA, C=SA
Issuer: CN=EXA Root CA, OU=EXA eTrust Center, O=EXA, C=SA
Algorithm: RSA; Serial number: -----
Valid from Wed Oct 15 12:41:37 AST 2014 until Sat Oct 15 13:11:37 AST 2039
adding as trusted cert:
Subject: CN=10.10.10.10, OU=EXA eTrust Center, O=EXA, C=SA
Issuer: CN=EXA Shared CA, OU=EXA eTrust Center, O=EXA, C=SA
Algorithm: RSA; Serial number: -----
Valid from Thu Nov 11 12:33:30 AST 2015 until Mon Nov 26 13:03:30 AST 2018
adding as trusted cert:
Subject: CN=EXA Shared CA, OU=EXA eTrust Center, O=EXA, C=SA
Issuer: CN=EXA Root CA, OU=EXA eTrust Center, O=EXA, C=SA
Algorithm: RSA; Serial number: ------
Valid from Thu Oct 25 07:56:05 AST 2014 until Wed Oct 16 08:26:05 AST 2024
, тогда я обнаружил, что система не отправляет сертификат клиента, и я не знаю, почему?
*** CertificateRequest
Cert Types: RSA, DSS, ECDSA
Supported Signature Algorithms: SHA256withRSA, SHA256withDSA, SHA256withECDSA, SHA384withRSA, Unknown (hash:0x5, signature:0x2), SHA384withECDSA, SHA512withRSA, Unknown (hash:0x6, signature:0x2), SHA512withECDSA, SHA1withRSA, SHA1withDSA, SHA1withECDSA
Cert Authorities:
<Empty>
[read] MD5 and SHA1 hashes: len = 36
Warning: no suitable certificate found - continuing without client authentication
*** Certificate chain
<Empty>
***
*** ECDHClientKeyExchange
мои вопросы:
- как вы думаете, в чем проблема?
- почему jdk не нашел подходящий сертификат там, где он существует и загружен в доверенный сертификат?
- на основании того, что JDK будет искать подходящий сертификат клиента?поэтому я могу определить, почему JDK не нашел его
@@ update
- Как вы думаете, проблема с моим устройством (IP)так как сертификат CN для другого IP?