如何通过编程方式从PEM证书存储中移除DST ROOT X3证书?
移除PEM证书存储中过期DST ROOT X3证书的编程化方案
用OpenSSL结合文本工具实现精准移除
OpenSSL本身没有直接删除指定证书的命令,但可以配合awk、grep这类文本处理工具,利用DST ROOT X3的唯一标识(哈希值或主体名称)来筛选移除。
方案1:基于证书哈希值过滤
DST ROOT X3的主体哈希值是933ad6dd,用awk遍历证书块并跳过目标证书:
awk ' BEGIN { in_cert=0 } /-----BEGIN CERTIFICATE-----/ { in_cert=1; cert="" } in_cert { cert = cert $0 "\n" if (/-----END CERTIFICATE-----/) { in_cert=0 echo "$cert" | openssl x509 -noout -hash | grep -q "933ad6dd" || print cert } } ' your_certs.pem > temp.pem && mv temp.pem your_certs.pem
方案2:基于证书主体名称过滤
如果记不住哈希值,直接匹配证书的主体信息:
awk ' BEGIN { in_cert=0 } /-----BEGIN CERTIFICATE-----/ { in_cert=1; cert="" } in_cert { cert = cert $0 "\n" if (/-----END CERTIFICATE-----/) { in_cert=0 echo "$cert" | openssl x509 -noout -subject | grep -q "DST Root CA X3" || print cert } } ' your_certs.pem > temp.pem && mv temp.pem your_certs.pem
拆分-过滤-合并的直观方案
如果觉得文本工具逻辑复杂,可以先拆分PEM为单个证书文件,再过滤合并:
- 拆分PEM到单个文件:
csplit -z your_certs.pem '/-----BEGIN CERTIFICATE-----/' '{*}'
- 过滤并合并非目标证书:
> cleaned_certs.pem for file in xx*; do openssl x509 -in "$file" -noout -subject | grep -q "DST Root CA X3" || cat "$file" >> cleaned_certs.pem done mv cleaned_certs.pem your_certs.pem && rm xx*
额外建议
- 操作前必须备份原始证书文件,防止误操作导致证书链断裂。
- 把上述命令打包成部署脚本的一部分,每次应用部署完成后自动执行。
- 如果部署环境支持编程语言(比如Python),可以用
cryptography库解析证书,通过代码筛选排除DST ROOT X3,适合需要更复杂逻辑的场景。
内容的提问来源于stack exchange,提问作者Ákos Vandra-Meyer
相关产品推荐
相关产品推荐

