收到致命警报:handshake_failure,已添加信任库

时间:2015-04-22 02:55:58

标签: java sslhandshakeexception

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

1 个答案:

答案 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是空的?