私はアリの答えに同意しますが(そしてそれを支持しました:)、Windows上のJavaで動作させるために追加の手順を実行する必要がありました(展開する必要がある場所):
openssl s_client -showcerts -connect www.example.com:443 < /dev/null | openssl x509 -outform DER > derp.der
openssl x509 -outform DER
を追加する前に 変換すると、Windows の keytool から、証明書の形式について不平を言うエラーが発生しました。 .der ファイルのインポートはうまくいきました。
ここではさらに複雑であることがわかりました。このローリングを実現するには、さらに多くの詳細を提供する必要がありました。クライアント認証が必要な接続であり、ハンクシェイクが証明書がダンプされた段階に進むためにさらに情報が必要だったという事実と関係があると思います.
これが私の作業コマンドです:
openssl s_client -connect host:port -key our_private_key.pem -showcerts \
-cert our_server-signed_cert.pem
うまくいけば、これは、より多くの情報でできる人にとって正しい方向への微調整です.
今回は sed
を使用して、リモート サーバーから証明書を PEM 形式で抽出するワンライナー :
openssl s_client -connect www.google.com:443 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
SNIあり
リモート サーバーが SNI を使用している (つまり、単一の IP アドレスで複数の SSL ホストを共有している) 場合、正しい証明書を取得するには、正しいホスト名を送信する必要があります。
openssl s_client -showcerts -servername www.example.com -connect www.example.com:443 </dev/null
SNI なし
リモート サーバーが SNI を使用していない場合は、-servername
をスキップできます。 パラメータ:
openssl s_client -showcerts -connect www.example.com:443 </dev/null
サイトの証明書の完全な詳細を表示するには、次の一連のコマンドも使用できます:
$ echo | \
openssl s_client -servername www.example.com -connect www.example.com:443 2>/dev/null | \
openssl x509 -text