2012-10-18 52 views
10

再一次,SSLPeerUnverified的沉悶問題,但我沒有使用自簽名證書。 我嘗試使用https連接到主機。該主機具有正確的證書,Firefox和HttpsUrlConnection都沒有任何問題。 但是嘗試使用HttpClient進行連接,我得到了可怕的異常。SSLPeerUnverifiedException:對方未驗證

任何線索?或者小費在哪裏看得更近?

謝謝!

編輯:調試輸出

主,處理異常:

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 

主,IOException異常中的getSession():

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 

回答

24

看來你需要將證書導入到您的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以及JRE中的cacerts路徑。

    sudo keytool -importcert -alias "$ALIAS" -file /tmp/$ADDRESS.cert \ 
        -keystore $PATH/cacerts -storepass changeit 
    
+0

2天。把你的投票好人。 –

相關問題