PKIX パスの構築に失敗しました: 要求されたターゲットへの有効な証明書パスが見つかりません
質問:
Java クライアントを使用して特定の HTTPS Web サービスにアクセスしようとすると、次の例外が発生します:
java.lang.RuntimeException: PKIX path building failed: unable to find valid certification path to requested target
回答:
この例外は、サーバーによって提示された証明書チェーンの問題のため、Java クライアントは Web サービスとの安全な接続を確立できません。
考えられる解決策:
トラスト ストアの構成:
クライアントのトラスト ストアに必要な証明書がインストールされていない可能性があります。これを解決するには、システム プロパティを設定して、トラスト ストアへのパスとそのパスワードを指定します:
<code class="java">System.setProperty("javax.net.ssl.trustStore", "clientTrustStore.key"); System.setProperty("javax.net.ssl.trustStorePassword", "password");</code>
サーバー証明書のインポート:
クライアントの信頼ストアにサーバーの証明書が含まれていない場合は、手動でインポートします。次の手順に従ってください:
PEM ファイルをバイナリ X に変換します.509 証明書ファイル (例:certificate.der):
<code class="shell">openssl x509 -in certificate.pem -out certificate.der -outform DER</code>
keytool ユーティリティを使用して DER ファイルをクライアントの信頼ストアにインポートします:
<code class="shell">keytool -import -alias server_cert -file certificate.der -keystore clientTrustStore.key</code>
Java SSL 構成の更新:
Java SSL 構成が正しく設定されていることを確認します。たとえば、~/.java/jre/lib/security/jssecacerts を変更するか、次のコマンドを使用します:
<code class="shell">keytool -import -alias server_cert -file certificate.der -keystore cacerts</code>
SSL 証明書検証を無効にします (非推奨):
一時的な措置として、SSL 証明書の検証を無効にすることができますが、これはセキュリティ上の理由からお勧めできません。
<code class="java">HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);</code>
取得別の証明書:
Web サービスに特定の証明書が必要な場合は、その証明書を取得し、クライアントの信頼ストアにインストールします。
以上が## HTTPS Web サービスにアクセスすると、Java クライアントで「PKIX パスの構築に失敗しました」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。