openssl verify 是干什么的
openssl verify 是 OpenSSL 自带的离线证书链校验工具:喂给它受信根证书(-CAfile)、中间证书(-untrusted)和待验证的叶证书,它会按 RFC 5280 的链构建规则逐级验证签名、有效期、基本约束与用途,全程不访问网络。签发后自检、上线前预检、监控脚本判断链是否完整,都靠它。适用 OpenSSL 1.1.1 与 3.x,Linux、macOS、Windows 版本通用。
基本信息
| 适用版本 | OpenSSL 1.1.1 / 3.x |
|---|---|
| 权限要求 | 普通用户,只读证书文件 |
| 基本语法 | openssl verify -CAfile root.pem -untrusted chain.pem leaf.pem |
| 核心选项 | -CAfile 受信根;-untrusted 中间证书;-purpose 用途;-checkend 有效期 |
| 是否联网 | 否,纯离线;不自动查 OCSP 与 CRL |
| 3.x 增强 | -show_chain 打印整条链,-x509_strict 启用严格模式 |
典型使用场景
- 签发后自检:确认 CA 下发的叶证书能被自己的根链走通
- 上线前预检:证书与链文件拼好后先跑一遍,避免用户端报链不完整
- 监控告警:配合 -checkend 在到期前发现,而不是等业务报错
- 排障定位:区分缺中间证书、用途不符、域名不匹配这几类报错
- 换 CA 迁移:批量验证存量证书在新根之下是否仍然有效
验证示例
验证示例
# 最基础的链校验:受信根 + 中间证书 + 叶证书
openssl verify -CAfile root.pem -untrusted intermediate.pem leaf.pem
# 按服务器用途校验:额外检查 EKU 是否包含 serverAuth
openssl verify -purpose sslserver -CAfile root.pem -untrusted intermediate.pem leaf.pem
# 拉取线上证书再喂给 verify,模拟客户端建链
openssl s_client -connect example.com:443 -showcerts </dev/null 2>/dev/null > chain.pem
openssl verify -CAfile root.pem chain.pem
# 有效期检查:30 天内到期则返回非 0,适合放进监控
openssl x509 -in leaf.pem -noout -checkend 2592000输出逐列读法
| 输出片段 | 含义 | 正常/异常 |
|---|---|---|
| 文件名: OK | 链构建成功且签名、用途均通过 | 正常 |
| error 20 at 0 depth | 找不到本地签发者,通常是缺中间证书 | 异常:把中间证书加进 -untrusted |
| error 18 at 0 depth | 自签的根不在受信集合中 | 异常:自签环境需显式提供 -CAfile |
| error 10 at 0 depth | 证书已过期 | 异常:立即续期并检查服务是否重载 |
| error 24 at 0 depth | 有效期起始时间在未来 | 异常:检查签发时间或本机时钟 |
verify 只校验链本身,不查吊销状态:OCSP/CRL 需要 -crl_check 或 openssl ocsp 单独确认。浏览器在链校验之外还会做域名匹配与 CT 检查,因此 verify 通过不等于浏览器一定接受。
公网证书通常要求把叶证书与中间证书按顺序拼成 fullchain 再配置到 Nginx/IIS/负载均衡;只配叶证书时,部分客户端会因拿不到中间证书而报 unknown_ca。