単一のコマンドを使用して証明書チェーン内のすべての証明書を別々の.crtファイルにエクスポートする方法

単一のコマンドを使用して証明書チェーン内のすべての証明書を別々の.crtファイルにエクスポートする方法

.crt単一のコマンドを使用して、証明書チェーン内のすべての証明書を別々のファイルにエクスポートしたいと思います。どうすればいいですか?

いくつかの背景情報を提供するには:

  1. opensslbashユーティリティを使いたいです。(openssl s_client -showcerts -connect <host>:<port> & sleep 4)
  2. 上記のコマンド可能複数の証明書を印刷します。つまり、次のパターンで複数の文字列を印刷できます。base64-----BEGIN CERTIFICATE-----でエンコードされたX.509証明書-----END CERTIFICATE-----。たとえば、

    -----BEGIN CERTIFICATE-----
    MIIFNzCCAx+gAwIBAgITUwAAAAJpqCKn3YTQ6gAAAAAAAjANBgkqhkiG9w0BAQsF...
    -----END CERTIFICATE-----
    
  3. ファイルの内容は、.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

関連情報