You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何打印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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:19:52