Java 收到致命警报:握手失败,已添加信任库

Java 收到致命警报:握手失败,已添加信任库,java,sslhandshakeexception,Java,Sslhandshakeexception,已设置信任库,但调用https时仍有错误 javax.net.ssl.SSLHandshakeException:收到致命警报:握手失败 整个错误消息很长,错误消息的最后一部分引用如下 main,WRITE:TLSv1更改密码规范,长度=1 ***完成 验证数据:{204、151、145、147、7、73、205、158、73、238、129、8} main,WRITE:TLSv1握手,长度=32 主,读取:TLSv1警报,长度=2 主、RECV TLSv1警报:致命,握手失败 main,称为

已设置信任库,但调用https时仍有错误

javax.net.ssl.SSLHandshakeException:收到致命警报:握手失败

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

main,WRITE:TLSv1更改密码规范,长度=1
***完成 验证数据:{204、151、145、147、7、73、205、158、73、238、129、8}


main,WRITE:TLSv1握手,长度=32
主,读取:TLSv1警报,长度=2
主、RECV TLSv1警报:致命,握手失败
main,称为closeSocket()
主,处理异常:javax.net.ssl.SSLHandshakeException:收到致命警报:握手失败 java.lang.Exception:;嵌套异常是: javax.net.ssl.SSLHandshakeException:收到致命警报:握手失败


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

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");
我不熟悉SSL,在goolge中,我发现密钥库只用于服务器,但我的应用程序是一个调用服务器API的客户端,所以不知道为什么要更改密钥库,现在它会成功,有人可以解释吗

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

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


为什么密钥库是空的?

您向服务器发送的密码套件是什么,您和服务器是否可能没有共享/同意一个公用密码以便继续通信。您可以查看服务器证书以查看支持的密码,并与发送时进行比较
System.setProperty("javax.net.ssl.keyStore", "C:/tasks/MIP/Cert/ccc_acp.keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "password");