校验行为与退出码
命令行握手工具默认在证书校验失败时仍打印握手信息并正常退出,这容易造成「能连上就没问题」的误判。加上让校验失败直接中止的选项后,脚本才能通过退出码判断结果;同时还要核对输出中的校验返回码。做巡检时还应指定目标名称,否则可能拿到默认站点的证书而得出错误结论。
基本信息
| 默认行为 | 打印校验返回码但不中止连接 |
|---|---|
| 严格模式 | 校验失败即返回错误,便于脚本判断 |
| 脚本建议 | 指定根证书文件并检查退出码,同时核对返回码 |
| 巡检注意 | 必须指定目标名称,否则可能命中默认站点 |
典型使用场景
- 巡检脚本:需要根据退出码判断证书是否有效
- 排错:确认证书链是否真的校验通过
- 多站点批量检测:统一输出格式
- 发布后验证:确认新证书已被正确加载
- 兼容性验证:确认客户端能否校验服务端证书
严格校验与脚本用法
严格校验与脚本用法
openssl s_client -connect example.com:443 -servername example.com -verify_return_error </dev/null
echo $? # 校验失败时返回非零
openssl s_client -connect example.com:443 -servername example.com -brief </dev/null返回码含义
| 返回码 | 含义 | 处理 |
|---|---|---|
| 0 | 校验通过 | 正常 |
| 10 | 证书已过期 | 更换证书 |
| 20 | 无法获取本地签发者 | 补齐链或根证书 |
| 62 | 名称不匹配 | 核对名称与虚拟主机配置 |
返回码与常用校验工具的错误编号一致,掌握几个高频编号可以快速定位方向;只看到「握手成功」并不代表校验通过。
落地建议
- 巡检脚本同时检查退出码与返回码
- 指定目标名称与根证书文件
- 批量检测时保留原始输出便于复核
- 把巡检结果接入告警,而不是只打印到终端
用未指定目标名称的探测结果判断线上证书状态,会命中默认站点的证书;这类错误结论会让排查方向完全偏离实际服务。