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
整个错误消息很长,错误消息的最后部分引用如下
main,WRITE:TLSv1更改密码规范,长度= 1
***完了 verify_data:{204,151,145,147,7,73,205,158,73,238,129,8}
main,WRITE:TLSv1握手,长度= 32
main,READ:TLSv1 Alert,length = 2
主,RECV TLSv1警告:致命,握手_失败
main,名为closeSocket()
main,处理异常:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure java.lang.Exception :;嵌套异常是: javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure
答案 0 :(得分:0)
不知道是什么原因,但如果我将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提供者是:
init keystore
sunX509类型的init keymanager
trustStore是:C:\ Program Files \ Java \ jre6 \ lib \ security \ cacerts
trustStore类型是:jks
trustStore提供者是:
init truststore
为什么keyStore是空的?