httpエージェントによるunable to find valid certification path to requested targetの問題の解決
1.知識予備
本文を理解するには、以下の知識を身につける必要があります. httpsの基本原理は、証明書の配布や鍵の交渉などを含む[1]. httpエージェントとhttpsエージェントの基本原理[2]. でよく使われるローカルhttpエージェントツール、例えばFiddler、BurpSuite; Java言語、HttpClientの基本機能とAPIを知る[3].
2.問題の説明と分析
httpclientライタを使用してhttpsページにアクセスするには、Javaプログラム(httpclientベース)エージェントツール(Fiddlerなど)WebサーバがJavaプログラムを実行すると、プログラムに異常が発生します.ヒント:
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
エラー・プロンプトから、Webサイトの証明書を検証できず、証明書検証チェーンが見つかりません.問題を解決するために、エージェントツールで生成された証明書を信頼できるルート証明書としてシステム証明書ライブラリにインポートしますが、問題は依然として発生します.資料[1]を読んだ後、Javaの証明書検証システムはオペレーティングシステムやブラウザとは独立しており、JREの証明書ライブラリを使用しており、エージェントツールを必要とするすべての証明書をJREの証明書ライブラリに追加していることに気づいた.
3.問題解決
Windowsシステムでは、JRE証明書ライブラリはProgram FilesJavajdk 1.xjrelibsecuritycacertsとして機能します.JavaはKeytool管理証明書を使用し、そのパスはProgram FilesJavajdk 1.8.0_144\bin\keytool.exe.したがって、keytoolを使用してエージェントツールの証明書をcacertsに追加する必要があります.[2]上記の過程について詳細な原理解釈がある.コマンドラインを開き、Step 1.cdからkeytool.exeのディレクトリに移動します.Step 2.次のコマンドを実行する(コマンドパラメータ説明はkeytoolヘルプファイル参照)
パスワードの入力を求める場合、javaのデフォルトパスワードはchangeitで、最後にyを入力して証明書を信頼します.Step 3.証明書が信頼できるルート証明書ライブラリにインポートされたことを確認する
参考資料
[1]JavaとHTTPのこと(四)HTTPSと証明書[2]httpsエージェント原理[3]HttpClient 4.5
本文を理解するには、以下の知識を身につける必要があります.
2.問題の説明と分析
httpclientライタを使用してhttpsページにアクセスするには、Javaプログラム(httpclientベース)エージェントツール(Fiddlerなど)WebサーバがJavaプログラムを実行すると、プログラムに異常が発生します.ヒント:
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
エラー・プロンプトから、Webサイトの証明書を検証できず、証明書検証チェーンが見つかりません.問題を解決するために、エージェントツールで生成された証明書を信頼できるルート証明書としてシステム証明書ライブラリにインポートしますが、問題は依然として発生します.資料[1]を読んだ後、Javaの証明書検証システムはオペレーティングシステムやブラウザとは独立しており、JREの証明書ライブラリを使用しており、エージェントツールを必要とするすべての証明書をJREの証明書ライブラリに追加していることに気づいた.
3.問題解決
Windowsシステムでは、JRE証明書ライブラリはProgram FilesJavajdk 1.xjrelibsecuritycacertsとして機能します.JavaはKeytool管理証明書を使用し、そのパスはProgram FilesJavajdk 1.8.0_144\bin\keytool.exe.したがって、keytoolを使用してエージェントツールの証明書をcacertsに追加する必要があります.[2]上記の過程について詳細な原理解釈がある.コマンドラインを開き、Step 1.cdからkeytool.exeのディレクトリに移動します.Step 2.次のコマンドを実行する(コマンドパラメータ説明はkeytoolヘルプファイル参照)
>keytool -import -alias FIDDLER -keystore ../lib/security/cacerts -file \
パスワードの入力を求める場合、javaのデフォルトパスワードはchangeitで、最後にyを入力して証明書を信頼します.Step 3.証明書が信頼できるルート証明書ライブラリにインポートされたことを確認する
keytool -list -keystore ../lib/security/cacerts
参考資料
[1]JavaとHTTPのこと(四)HTTPSと証明書[2]httpsエージェント原理[3]HttpClient 4.5