証明書チェーン内のすべての証明書をエクスポートして、1つのコマンドで.crt
ファイルを分離したいと思います。どうやってやるの?
いくつかの背景情報を提供するには:
openssl
bashユーティリティを使用したい:(openssl s_client -showcerts -connect <Host>:<port> & sleep 4)
上記のコマンドmay複数の証明書を出力します。つまり、次のパターンで複数の文字列を出力できます:-----BEGIN CERTIFICATE-----
base64でエンコードされたX.509証明書-----END CERTIFICATE-----
。例えば:
-----BEGIN CERTIFICATE-----
MIIFNzCCAx+gAwIBAgITUwAAAAJpqCKn3YTQ6gAAAAAAAjANBgkqhkiG9w0BAQsF...
-----END CERTIFICATE-----
.crt
ファイルの内容は、タグを含め、正確に印刷されたbase64エンコードされた証明書である必要があります。
awk
を使用して問題を解決できることがわかりました。
(openssl s_client -showcerts -connect <Host>:<port> & sleep 4) | awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/{if(/-----BEGIN CERTIFICATE-----/){a++}; out="/tmp/<Host>"a".crt"; print > out}'
置換<Host>
および<port>
実際の値。 sleep
コマンドは、openssl
コマンドのタイムアウトを制限するためにあります。
awk '/BEGIN/ { i++; } /BEGIN/, /END/ { print > "cert-" i ".crt" }'
にパイプ
例えば:
echo "" |
openssl s_client -showcerts -connect www.example.com:443 |
awk '/BEGIN/ { i++; } /BEGIN/, /END/ { print > "cert-" i ".crt" }'