[英]Received fatal alert: handshake_failure, already added truststore
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");
已经设置了信任库,但是在调用https时仍然有错误
javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure
整个错误消息很长,错误消息的最后一部分引述如下
主,写:TLSv1更改密码规范,长度= 1
***完成的verify_data:{204、151、145、147、7、73、205、158、73、238、129、8}
主,写:TLSv1握手,长度= 32
主要,读取:TLSv1警报,长度= 2
主要,RECV TLSv1警报:致命,握手失败
主要,称为closeSocket()
主要,处理异常:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure java.lang.Exception:; 嵌套的异常是:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure
不知道是什么原因,但是如果我将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为空?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.