SSLPeerUnverifiedException:peer未经过身份验证

时间:2012-10-18 18:43:41

标签: java httpclient

再一次,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

main,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

2 个答案:

答案 0 :(得分:31)

您似乎需要将证书导入JVM正在使用的可信密钥库中。如果您未在应用程序中使用其他受信任的密钥库,那么这将是" cacerts"。

您可以按照" How to Fix 'SSLPeerUnverifiedException: peer not authenticated' Exception in Groovy / Java "的步骤指南进行操作。

简短版本:

  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 sudo keytool -importcert -alias "$ALIAS" -file /tmp/$ADDRESS.cert \ -keystore $PATH/cacerts -storepass changeit ,并在JRE中添加cacerts的路径。

    {{1}}

答案 1 :(得分:1)

以前的回答链接不起作用,所以我附加了其他内容:

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