以下のコマンドのようにcurlを使って接続できるかなぁ、
curl --cacert some.pem https://someurl.com/resource
これを httpclient コードに変換するにはどうすればよいですか? pem ファイルを変換して新しいキーストアを作成する必要があることは理解していますが、これらすべての openssl、keytool コマンド、キーストア、トラストストアが混乱し、どれをどの順序で使用すればよいかわかりません。
以下のコマンドのようにcurlを使って接続できるかなぁ、
curl --cacert some.pem https://someurl.com/resource
これを httpclient コードに変換するにはどうすればよいですか? pem ファイルを変換して新しいキーストアを作成する必要があることは理解していますが、これらすべての openssl、keytool コマンド、キーストア、トラストストアが混乱し、どれをどの順序で使用すればよいかわかりません。
PEMファイルからキーストア(トラストストアとして使用します)を作成する必要があります。これは次のように実行できます。
keytool -import -file cacert.pem -alias myca -keystore truststore.jks
次に、このキーストアをトラストストアとして使用する必要があります。
特定の接続に対してのみこれを実行する場合は、この回答に従う必要があります。
アプリケーション内のすべての接続(または少なくともデフォルトを変更しない接続)に対してこれを実行する場合は、javax.net.ssl.trustStore
(および関連する)システムプロパティを使用できます(JSSEリファレンスガイドの「カスタマイズ」セクションを参照)。アプリケーション全体に対してこれを実行する場合の問題は、デフォルトの信頼できるCAが含まれないことです。これを回避する簡単な方法はcacerts
、JREにバンドルされているファイルのコピーを作成し、それをの開始点として使用することですtruststore.jks
。
または、証明書をグローバルファイルに直接インポートすることもできcacerts
ますが、これにより、このJREで実行されているすべてのアプリケーションでその証明書がデフォルトで信頼できるようになります。
(この回答で、キーストアとトラストストアの違いについて詳しく知ることもできます。)