如何打印PEM证书链的CN、颁发者及有效期信息
问题描述
我的PEM证书链包含1张终端证书和1张中间证书,已通过以下命令确认证书数量为2:
$ grep -c BEGIN.CERTIFICATE myCert.pem 2 $
我尝试执行以下命令:
$ openssl crl2pkcs7 -nocrl -certfile myCert.pem | openssl pkcs7 -print_certs | openssl x509 -noout -subject -issuer -dates subject=CN = *.myDomain.com issuer=C = FR, O = Gandi, CN = Gandi Standard SSL CA 2 notBefore=May 4 00:00:00 2023 GMT notAfter=Jun 1 23:59:59 2024 GMT $
但仅获取到第一个证书的CN、颁发者和有效期信息,请问如何获取证书链中所有证书的对应信息?
解决方法
原命令只输出第一个证书信息,是因为openssl x509默认仅读取输入中的第一份证书,忽略后续证书块。以下两种方法可获取所有证书的信息:
方法一:拆分证书后逐个解析
通过awk将PEM文件中的每个证书块拆分到单独临时文件,再分别调用openssl x509解析,最后清理临时文件:
awk '/BEGIN CERTIFICATE/{n++} {print > "cert" n ".pem"}' myCert.pem && for cert in cert*.pem; do echo "--- 证书 $cert ---"; openssl x509 -noout -subject -issuer -dates -in "$cert"; done && rm cert*.pem
执行后会按序号标注每个证书,并输出对应信息。
方法二:直接管道处理无需拆分
利用awk分段调用openssl x509,处理完一个证书就关闭进程,确保下一个证书被正确解析:
openssl crl2pkcs7 -nocrl -certfile myCert.pem | openssl pkcs7 -print_certs | awk '/-----BEGIN CERTIFICATE-----/{close("openssl x509 -noout -subject -issuer -dates")} {print | "openssl x509 -noout -subject -issuer -dates"}'
该方法无需生成临时文件,直接通过管道完成所有证书的信息提取。
内容的提问来源于stack exchange,提问作者SebMa
相关产品推荐
相关产品推荐

