如何用Bash+OpenSSL检查服务器证书是否为谷歌不信任的赛门铁克证书
用Bash + OpenSSL检查证书是否属于谷歌不信任的赛门铁克根链
当然可以!用Bash搭配OpenSSL完全能搞定这个需求,下面是一套针对你的场景定制的分步流程,直接就能用:
1. 先准备好不信任根证书集合
把你从Chromium仓库拿到的赛门铁克不信任根PEM内容,保存成一个单独的文件,比如命名为symantec_untrusted_roots.pem。如果原文件本身就是多个证书拼接的PEM格式,直接用就行;如果是分散的多个文件,把所有PEM内容复制粘贴合并到这一个文件里。
2. 单个证书的检查命令
针对某一个.crt证书,运行这条命令:
openssl verify -CAfile symantec_untrusted_roots.pem your_certificate.crt
- 如果输出显示
your_certificate.crt: OK,划重点:这说明你的证书信任链最终锚定到了谷歌标记为不信任的赛门铁克根,属于受影响的证书,需要处理。 - 如果输出是类似
error 20 at 0 depth lookup: unable to get local issuer certificate这类错误,说明证书没链到这些不信任根,暂时安全。
要是你的证书文件里包含完整的证书链(比如从服务器证书到中间CA),可以加上-untrusted参数来指定中间证书,确保验证更准确:
# 假设证书文件里包含完整链,先提取中间证书部分 openssl verify -CAfile symantec_untrusted_roots.pem -untrusted <(openssl x509 -in your_certificate.crt -noout -text | awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/' | tail -n +2) your_certificate.crt
3. 批量检查目录下所有.crt证书
如果要一次性检查某个目录下的所有.crt文件,用这个脚本更高效:
#!/bin/bash # 指定不信任根证书文件路径 UNTRUSTED_ROOTS="./symantec_untrusted_roots.pem" # 遍历当前目录下所有.crt文件 for cert_file in *.crt; do echo "正在检查: $cert_file" # 执行验证命令,捕获输出 verify_output=$(openssl verify -CAfile "$UNTRUSTED_ROOTS" "$cert_file" 2>&1) # 判断是否匹配成功(受影响) if [[ "$verify_output" == *": OK" ]]; then echo -e "\033[31m⚠️ 警告: $cert_file 属于谷歌不信任的赛门铁克根链!\033[0m" else echo -e "\033[32m✅ $cert_file 未受影响。\033[0m" fi echo "------------------------" done
把这段代码保存为check_symantec_certs.sh,给它加上执行权限:
chmod +x check_symantec_certs.sh
然后在存放.crt证书的目录下运行脚本即可。
背后的原理
OpenSSL的verify命令默认会用系统自带的信任根来验证证书,但我们通过-CAfile参数强制指定只信任谷歌列出的那些赛门铁克不信任根。如果目标证书能被这些根验证通过,就意味着它的信任链最终指向了被谷歌标记为不安全的根,也就是需要替换的证书。
内容的提问来源于stack exchange,提问作者mardus
相关产品推荐
相关产品推荐

