使用 openssl 或其他命令查看 PEM 证书文件(完整证书链)中的所有证书

使用 openssl 或其他命令查看 PEM 证书文件(完整证书链)中的所有证书

通常证书文件(PEM 格式)包含多个证书,例如:

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

使用命令: openssl x509 -in cert.pem -noout -text我可以看到第一个条目。

是否有任何内置方式来显示第二个条目或所有条目。

是否有简单的方法可以查看所有条目?

我真正感兴趣的是:主题的 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

相关内容