openssl verify 是干什么的
verify 是 OpenSSL 里独立的链校验命令:它不做任何网络连接,只按你给出的信任根与证书文件走一遍验证逻辑,输出 OK 或具体的失败原因。它的价值在于把「链对不对」从服务端行为里剥离出来单独判断,配合 -show_chain 还能逐级打印验证路径,比在浏览器里对着错误码猜要可靠得多。
基本信息
| 基本用法 | openssl verify -CAfile root.pem -untrusted intermediate.pem leaf.pem |
|---|---|
| 展示链 | -show_chain 打印验证路径与层级 |
| 用途检查 | -purpose sslserver 或 sslclient 校验证书用途 |
| 常见错误 | unable to get local issuer certificate、certificate has expired |
| 输入要求 | 证书需为 PEM 格式;DER 需先转换 |
典型使用场景
- 换 CA 或续期后独立验证:确认新链能走到信任根再上线
- 排查浏览器报 AUTHORITY_INVALID:先在命令行确认链是否完整
- 校验内部 CA 签发的证书:确认用途扩展与名称约束符合预期
- 接收第三方交付的材料:链齐不齐、能否通过验证,先验后用
- 在发布脚本里做门禁:链验证不通过直接中断部署
完整校验流程
完整校验流程
# 基本校验:中间证书用 -untrusted 传入,根证书用 -CAfile 传入
openssl verify -CAfile root.pem -untrusted intermediate.pem leaf.pem
# 打印验证路径与层级,看清失败在哪一环
openssl verify -show_chain -CAfile root.pem -untrusted intermediate.pem leaf.pem
# 按服务器用途校验,用途扩展不符时会在这里报错
openssl verify -purpose sslserver -CAfile root.pem -untrusted intermediate.pem leaf.pem
# 用服务端实际下发的链整体验证
openssl verify -untrusted fullchain.pem leaf.pem输出与错误读法
| 输出或错误 | 含义 | 处置 |
|---|---|---|
| leaf.pem: OK | 链验证通过 | 继续核对域名与有效期 |
| unable to get local issuer certificate | 找不到签发者,中间证书缺失 | 用 -untrusted 补上链文件 |
| certificate has expired | 链上存在过期证书 | 用 -dates 定位到具体哪一张 |
| unsuitable certificate purpose | 用途扩展与校验目的不符 | 检查 EKU 与 -purpose 取值 |
| depth N error | 失败发生在第 N 级 | 按层级逐张核对签发关系 |
错误信息通常会指出失败层级:链缺失、过期、用途不符或名称约束,先读错误再回头查字段,能省掉大量试错。
verify 只看静态文件,不发网络请求,也不检查吊销状态(OCSP/CRL),所以 verify 通过不等于浏览器一定放行:域名匹配与吊销状态需要另外验证。
-purpose 的取值决定检查哪些用途扩展:服务端证书用 sslserver,客户端证书用 sslclient。用途扩展缺失或与角色不符时报 unsuitable certificate purpose,这类问题在内部 CA 签发的证书上最常见。