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握手,length:32 main,READ:TLSv1 Alert,length = 2 main,RECV TLSv1 ALERT:fatal,handshake_failure main,名为closeSocket()main,处理异常:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure java.lang .Exception:;嵌套异常是:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure
1 回答
不知道是什么原因,但如果我将setProperty从trustStore更改为keyStore,程序工作!!
我不熟悉SSL,在goolge中,我发现keyStore仅用于服务器,但是我的应用程序是一个调用服务器API的客户端,所以不知道为什么要更改为keyStore并且它现在会成功,任何人都可以解释一下?
有关更多信息,我发现如果我删除所有System.setProperty(...),那么在控制台中,我看到keyStore是空的但是trustStore不是,如下所示:
为什么keyStore是空的?