23

再一次,SSLPeerUnverified 的沉闷问题,但我没有使用自签名证书。我尝试使用 https 连接到主机。此主机具有正确的证书,Firefox 和 HttpsUrlConnection 都没有任何问题。但是尝试使用 HttpClient 进行连接时,我得到了可怕的异常。

有什么线索吗?或者提示在哪里看更近?

谢谢!

编辑:调试输出

主要,处理异常:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: 
sun.security.provider.certpath.SunCertPathBuilderException: 
unable to find valid certification path to requested target

主要,getSession() 中的 IOException:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: 
unable to find valid certification path to requested target
4

2 回答 2

40

您似乎需要将证书导入 JVM 正在使用的受信任密钥库中。如果您没有在应用程序中使用不同的受信任密钥库,则这将是“cacerts”。

您可以按照“如何在 Groovy / Java 中修复 'SSLPeerUnverifiedException: peer not authenticated' Exception ”中的分步指南进行操作。

精简版:

  1. 运行以下命令,替换$ADDRESS为 URL,减去“https://”:

    echo -n | openssl s_client -connect $ADDRESS:443 | \
      sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$ADDRESS.cert
    
  2. 运行以下命令,$ALIAS将密钥的短名称替换为$ADDRESS上面的证书名称,$PATH以及 JRE 中 cacerts 的路径。

     sudo keytool -importcert -alias "$ALIAS" -file /tmp/$ADDRESS.cert \
       -keystore $PATH/cacerts -storepass changeit
    
于 2013-01-17T20:30:56.390 回答
2

以前的答案链接不起作用,所以我附上额外的:

https://blogs.oracle.com/java-platform-group/entry/self_signed_certificates_for_a

于 2015-07-10T09:22:11.103 回答