收到致命警报:handshake_failure,已添加信任库

Posted

技术标签:

【中文标题】收到致命警报:handshake_failure,已添加信任库【英文标题】:Received fatal alert: handshake_failure, already added truststore 【发布时间】:2015-06-29 11:34:09 【问题描述】:
System.setProperty("javax.net.ssl.trustStore", "C:/tasks/MIP/Cert/ccc_acp.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "password");
System.setProperty("javax.net.debug", "ssl");

已经设置了truststore,但是调用https的时候还是报错

javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure

整个错误信息很长,错误信息的最后部分引用如下

主,写入:TLSv1 更改密码规范,长度 = 1 *** 完成的 验证数据: 204, 151, 145, 147, 7, 73, 205, 158, 73, 238, 129, 8


主要,写入:TLSv1 握手,长度 = 32 主要,阅读:TLSv1 警报,长度 = 2 主要,RECV TLSv1 ALERT:致命,handshake_failure main,调用 closeSocket() 主要,处理异常:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure java.lang.Exception: ;嵌套异常是: javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure

【问题讨论】:

您向服务器发送的密码套件是什么,您和服务器是否有可能不共享/同意通用密码以进行通信。您可以查看服务器证书以查看支持的密码,并与发送时进行比较 【参考方案1】:

不知道是什么原因,但是如果我将 setProperty 从 trustStore 更改为 keyStore,程序就可以工作了!!

System.setProperty("javax.net.ssl.keyStore", "C:/tasks/MIP/Cert/ccc_acp.keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "password");

我对SSL不熟悉,在goolge中,我发现keyStore仅用于服务器,但我的应用程序是调用服务器API的客户端,所以不知道为什么要更改为keyStore,现在它会成功,任何人能解释一下吗?

关于更多信息,我发现如果我删除所有 System.setProperty(...),然后在控制台中,我看到 keyStore 为空但 trustStore 不是,如下:

keyStore 是: keyStore 类型为:jks keyStore 提供者是: 初始化密钥库 SunX509 类型的 init 密钥管理器 trustStore 是:C:\Program Files\Java\jre6\lib\security\cacerts trustStore 类型是:jks trustStore 提供者是: 初始化信任库

为什么 keyStore 是空的?

【讨论】:

以上是关于收到致命警报:handshake_failure,已添加信任库的主要内容,如果未能解决你的问题,请参考以下文章

SSL:收到致命警报:handshake_failure

收到致命警报:handshake_failure,已添加信任库

信任 Websocket SSL - 收到致命警报:handshake_failure

OWASP ZAP - SSLHandshakeException:收到致命警报:handshake_failure

Apple Pay 证书更新 | SSLHandshakeException:收到致命警报:handshake_failure

无法下载站点地图:SSLHandshakeException:收到致命警报:handshake_failure