0
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 Change Cipher Spec, length = 1
*** Finished verify_data: { 204, 151, 145, 147, 7, 73, 205, 158, 73, 238, 129, 8 }


main,WRITE:TLSv1 Handshake,长度 = 32
main,READ:TLSv1 Alert,length = 2
main,RECV TLSv1 ALERT:致命,handshake_failure
main,调用 closeSocket()
main,处理异常:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure java.lang.Exception: ; 嵌套异常是:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure

4

1 回答 1

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 provider 是:
init keystore
init keymanager of type SunX509
trustStore 是:C:\Program Files\Java\jre6\lib\security\cacerts
trustStore 类型是:jks
trustStore provider 是:
init truststore

为什么 keyStore 是空的?

于 2015-04-22T04:03:50.943 回答