如何以两种方式通过SSL握手判断服务器或客户端身份验证是否失败

时间:2019-06-18 20:56:08

标签: java ssl

以下是失败的SSL握手(带有客户端身份验证)的调试输出的摘要。我几乎可以肯定我的密钥库中有所有相关证书。我还尝试过信任所有-Dcom.sun.net.ssl.checkRevocation=false这样的服务器,并根据Medhi对Is there a java setting for disabling certificate validation?的回答。我总是得到相同的unknown_ca异常。

此异常是否可能来自服务器而不喜欢我作为客户端提供的凭据?怎么能知道这个错误来自哪一侧?

0000: A6 B5 D1 75 74 B2 73 97   E1 B2 BA 5B 56 75 6E 09  ...ut.s....[Vun.
Server write key:
0000: E3 DF 3B CC 9A 6C DF A4   47 A0 69 51 D9 80 0F F2  ..;..l..G.iQ....
... no IV derived for this protocol
*** CertificateVerify
Signature Algorithm SHA512withRSA
MyMain, WRITE: TLSv1.2 Handshake, length = 264
MyMain, WRITE: TLSv1.2 Change Cipher Spec, length = 1
*** Finished
verify_data:  { 69, 68, 30, 177, 182, 137, 211, 81, 29, 49, 195, 244 }
***
MyMain, WRITE: TLSv1.2 Handshake, length = 80
MyMain, READ: TLSv1.2 Alert, length = 2
MyMain, RECV TLSv1.2 ALERT:  fatal, unknown_ca
%% Invalidated:  [Session-1, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256]
MyMain, called closeSocket()

1 个答案:

答案 0 :(得分:2)

MyMain, RECV TLSv1.2 ALERT:  fatal, unknown_ca

客户端从服务器接收到TLS警报,因为服务器不知道(未知),因此不信任客户端发送的证书的颁发者(ca)。

这意味着您的客户端没有发送服务器期望的证书,或者客户端未能包括必要的中间证书,因此证书验证失败,或者服务器端的配置错误。

  

...我也试图信任所有服务器...

这在这里无济于事。问题不是客户端未能验证服务器证书,而是服务器未能验证客户端证书。在客户端站点上禁用证书验证对服务器端的证书验证无效,这就是问题所在。