web-dev-qa-db-ja.com

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

証明書チェーン内のすべての証明書をエクスポートして、1つのコマンドで.crtファイルを分離したいと思います。どうやってやるの?

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

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

    -----BEGIN CERTIFICATE-----
    MIIFNzCCAx+gAwIBAgITUwAAAAJpqCKn3YTQ6gAAAAAAAjANBgkqhkiG9w0BAQsF...
    -----END CERTIFICATE-----
    
  3. .crtファイルの内容は、タグを含め、正確に印刷されたbase64エンコードされた証明書である必要があります。

2
aleksander_si

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コマンドのタイムアウトを制限するためにあります。

0
aleksander_si

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"  }'
1
garethTheRed