.crt
単一のコマンドを使用して、証明書チェーン内のすべての証明書を別々のファイルにエクスポートしたいと思います。どうすればいいですか?
いくつかの背景情報を提供するには:
openssl
bashユーティリティを使いたいです。(openssl s_client -showcerts -connect <host>:<port> & sleep 4)
上記のコマンド可能複数の証明書を印刷します。つまり、次のパターンで複数の文字列を印刷できます。base64
-----BEGIN CERTIFICATE-----
でエンコードされたX.509証明書-----END CERTIFICATE-----
。たとえば、-----BEGIN CERTIFICATE----- MIIFNzCCAx+gAwIBAgITUwAAAAJpqCKn3YTQ6gAAAAAAAjANBgkqhkiG9w0BAQsF... -----END CERTIFICATE-----
ファイルの内容は、
.crt
ラベルを含む印刷されたbase64でエンコードされた証明書と同じでなければなりません。
答え1
パイプを通して入る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" }'
答え2
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