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

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

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

一句话回答:用 openssl verify 检查证书链时,还应按用途显式传入 -purpose sslserver -verify_hostname example.com;中间证书用 -untrusted,受信 CA 用 -CAfile 或所用安装的默认信任库。OK 仅说明本次启用的检查通过,不代表自动检查所有吊销状态或适配所有客户端。

三种典型场景

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

openssl verify -purpose sslserver -verify_hostname example.com cert.pem
# cert.pem: OK

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

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

openssl verify -purpose sslserver -verify_hostname example.com -untrusted ca-chain.pem cert.pem

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

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

openssl verify -purpose sslserver -verify_hostname example.com -CAfile my-root-ca.pem cert.pem
openssl verify -purpose sslserver -verify_hostname example.com -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)

Q:浏览器说安全,openssl verify 却失败?

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

Q:verify 输出 OK 就万事大吉了吗?

A:OK 表示本次启用的验证检查通过;没有传入主机名、用途或吊销检查参数,就不能推断这些检查也已通过。私钥匹配需另外比较统一编码后的公钥 SHA-256 摘要,不能用 verify 的结果替代。

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

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


参考资料

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

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台