openssl または別のコマンドを使用して、PEM 証明書ファイル (完全な証明書チェーン) 内のすべての証明書を表示します。

openssl または別のコマンドを使用して、PEM 証明書ファイル (完全な証明書チェーン) 内のすべての証明書を表示します。

多くの場合、証明書ファイル (PEM 形式) には次のような複数の証明書が含まれます。

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
.....
-----END CERTIFICATE-----

次のコマンドで openssl x509 -in cert.pem -noout -text最初のエントリを確認できます。

2 番目のエントリまたはすべてのエントリを表示する組み込みの方法はありますか。

すべてのエントリを表示する簡単な方法はありますか?

私が本当に興味を持っているのは、C、ST、O、OU、CN、件名、発行者、件名の有効期限です。

答え1

ポスト バンドル内のすべての SSL 証明書を表示するにはどうすればいいですか? いくつかの可能性を示唆しています:

openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -noout (gives shorter output)
keytool -printcert -v -file <certs.crt>

この投稿には、Perl、bash、awk などのユーティリティを使用する場合のバリエーションがさらに含まれています。

答え2

OpenSSL 以外のツールをお勧めします。別の一般的な TLS スタックである GnuTLS には、certtool同じ形式で出力を生成する同様のプログラムがあります。

certtool -i < multiplecerts.pem

(あまり一般的ではない証明書拡張機能のデコードなど、いくつかの細かい点では異なります。)

答え3

これは古い情報だとはわかっていますが、コメントアウトされた行がかなり多く含まれている pem 形式の証明書チェーンから件名、有効期限、発行者を取得しようとして、ここにたどり着きました。

そこで、bash 4.2.46 を実行している RHEL7 で、GNU.org の sed ドキュメントを徹底的に読んだ後に私がたどり着いた解決策は次のとおりです。sed マルチラインテクニック

for CULPRIT in $(sed -n '/^-----BEGIN.*CERTIFICATE-----/{n;p}' CHAIN-FILE-NAME); do
VICTIM="$(printf "${CULPRIT}" | sed -e 's,\/,\\\/,g')"
sed -e '/./{H;$!d;}' -e 'x;/'"${VICTIM}"'/!d' CHAIN-FILE-NAME | openssl x509 -subject -dates -issuer -noout
done

関連情報