命令行如何验证 SSL 证书的有效性

用 OpenSSL 验证证书链,并显式检查服务器用途与主机名;信任库按安装环境配置。介绍 -untrusted、-CAfile 及远程 s_client 验证,避免把连接成功当成证书有效。

最佳实践
加密网络与通信桥梁插画

三种典型场景

1. 单张证书 + 系统根证书库

openssl verify cert.pem
# cert.pem: OK

2. 证书 + 中间证书链(最常见)

CA 通常给你站点证书和 chain/bundle 两个文件:

openssl verify -untrusted ca-chain.pem cert.pem

-untrusted 告诉 openssl"这些中间证书用于补链,但不当信任锚"。

3. 自建 CA 环境(内网/测试)

openssl verify -CAfile my-root-ca.pem cert.pem
openssl verify -CApath /etc/ssl/certs cert.pem     # 指定根证书目录

验证远程站点的完整链

openssl s_client -connect example.com:443 -servername example.com \
  -verify_hostname example.com -verify_return_error </dev/null
# 同时检查证书链、主机名和命令退出状态;不要隐藏错误输出

-servername 只发送 SNI,不负责主机名验证;-verify_hostname 才验证域名。-verify_return_error 让验证失败终止握手。吊销检查需要另外配置 CRL/OCSP,默认成功不证明未吊销。

单次验证通过后,定期检查同一域名的到期时间。观测云 SSL 拨测 可设置 Host、端口、证书剩余天数条件与执行节点,先运行测试获取证书信息,再按续期安排设置周期和通知。它检查的是该节点看到的证书,客户端信任库差异仍按上面的命令单独排查。

失败原因码速查

代码 含义 处理
10 证书已过期 续期重签
18 自签名证书不在信任库 内网 CA 加进信任库或 -CAfile
21 无法验证第一张证书(链不完整) 补中间证书
2 找不到签发者证书 根证书库缺失/路径不对

常见问题(FAQ)

A:浏览器、操作系统和 OpenSSL 的信任库及补链行为可能不同。OpenSSL 默认路径取决于编译和安装方式;应使用目标客户端所需的信任策略排查,而非一律以某个工具为准。

Q:怎么验证 pfx/p12 格式证书?

A:先转 PEM:openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem,另行提取所需中间证书再按上文验证;验证证书不需要导出私钥。


参考资料

本文依据官方资料核对,未进行现场运行测试;代码与配置示例需结合实际版本、权限和环境验证。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台