通常证书文件(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