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次のコマンドを実行し、「https://」を除いた URL に置き換えます。

    echo -n | openssl s_client -connect $ADDRESS:443 | \
      sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$ADDRESS.cert
    
  2. 次のコマンドを実行し$ALIAS、キーの短い名前を$ADDRESS上記の証明書名に置き換え、 $PATHJRE の 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 に答える