可预期却最容易失守
证书与域名到期是完全可预期的故障,唯一依赖是巡检能否提前发现。证书要核对有效期末尾与信任链完整性,域名要核对注册到期时间与解析记录。两者的共同点是事前没有症状,到期瞬间服务整体不可用,且影响面覆盖全部用户。
基本信息
| 检查对象 | 站点证书、内部服务证书、中间证书链、域名注册期 |
|---|---|
| 关键字段 | 生效时间、到期时间、签发者、主体备用名称 |
| 提前量设定 | 按续期与变更流程耗时倒推,而非固定一天 |
| 检查方式 | 从外部握手取实际下发的证书并解析 |
| 覆盖范围 | 网关、负载均衡、服务间调用各自持有的证书 |
典型使用场景
- 对外站点巡检:从外部发起握手读取实际下发证书,而不是只读服务器上的文件
- 内部服务证书:服务间调用同样依赖证书,常因不可见于浏览器而被漏检
- 域名注册期:注册与代理链路不同,到期时间应以注册局记录为准
- 自动续期核对:续期失败往往到临近到期才暴露,需要独立监控执行结果
- 变更窗口规划:提前量要覆盖审批、执行与回滚窗口,而不只是留出一天
检查项与判读
| 检查项 | 判读依据 | 常见问题 |
|---|---|---|
| 到期时间 | 证书有效期末尾 | 只看本地文件,忽略实际下发内容 |
| 证书链 | 是否包含中间证书 | 链不全导致部分客户端握手失败 |
| 覆盖域名 | 主体备用名称列表 | 新增域名未纳入证书 |
| 域名注册期 | 注册局的到期时间 | 代理续费链路中断未被察觉 |
读取实际下发证书
读取实际下发证书
# 从外部握手取实际下发的证书,而不是只读服务器上的文件
echo | openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null | openssl x509 -noout -subject -issuer -dates
# 判断剩余有效期是否低于阈值,决定是否进入续期流程
openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null | openssl x509 -noout -checkend 604800 && echo ok || echo renew-needed
# 确认链上是否包含中间证书
openssl s_client -showcerts -connect www.example.com:443 2>/dev/null | grep -c 'BEGIN CERTIFICATE'启用了自动续期不代表可以取消巡检。权限变更、域名验证失效、签发接口异常都会导致续期静默失败,因此除到期时间外,还应核对续期任务最近一次执行结果与下次计划时间。
只读取服务器上的证书文件会漏检实际下发的证书:负载均衡、网关或 CDN 节点上可能存在另一份证书。巡检必须从外部握手路径取样,否则检查结论与真实服务表现不一致。