为什么要做到期监控
证书过期是最常见的线上事故来源之一,而它完全可以提前发现。做法是把到期检查做成计划任务并接入告警,同时覆盖三条路径:公网域名探测、服务器本地证书文件扫描、资产清单对照。阈值建议分级,例如到期前 30 天预警、14 天提醒、7 天升级,并记录每张证书的实际部署位置,告警出现时才能直接找到负责人和机器。
基本信息
| 监控对象 | 公网域名证书、内部双向认证证书、私有 CA 签发的证书 |
|---|---|
| 阈值设计 | 30 天预警、14 天提醒、7 天升级 |
| 采集方式 | 命令行探测、本地文件扫描、资产清单对照 |
| 记录字段 | 主体、签发者、SAN、到期时间、部署路径、负责人 |
| 告警通道 | 邮件、群机器人或工单系统,任选其一但要可追溯 |
典型使用场景
- 对外站点巡检:每天探测生产域名,临近到期立即通知
- 内部服务盘点:扫描服务器上的证书文件,覆盖不经公网的服务
- 资产对照:用证书清单与资产库比对,发现未纳管的证书
- 轮换排期:根据到期时间分布提前安排批量换证窗口
- 事故复盘:用监控记录确认告警是否及时、处置是否到位
批量探测域名证书
批量探测域名证书
# 逐个域名探测,输出证书失效时间
for h in example.com api.example.com; do
echo -n $h:
echo | openssl s_client -connect $h:443 -servername $h 2>/dev/null | openssl x509 -noout -enddate
done
# 只关心剩余天数时,可以用 checkend 直接判断
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -checkend 1209600扫描本机证书文件
扫描本机证书文件
find /etc/ssl /etc/nginx -type f \( -name '*.pem' -o -name '*.crt' \) 2>/dev/null | while read f; do
e=$(openssl x509 -in $f -noout -enddate 2>/dev/null) && echo $f $e
done三条采集路径对照
| 路径 | 覆盖范围 | 局限 |
|---|---|---|
| 域名探测 | 实际对外生效的证书 | 只能看到公网可达的服务 |
| 文件扫描 | 服务器上存放的证书文件 | 扫不到未部署或已替换的旧文件 |
| 资产库对照 | 登记在册的全部证书 | 依赖登记及时,漏登记就是盲区 |
监控输出中保留主体、签发者、SAN 与部署路径,告警时就能直接定位负责人与机器,不必再人工翻配置。
阈值要结合轮换周期:证书有效期只有 90 天时,30 天预警意味着只剩三分之一时间,留给审批与发布刚好;有效期很长时可以把首个阈值往后放,减少噪音。
告警必须有人闭环:只发到公共群里的消息最容易无人处理,建议指定值班人或自动开单,并在换证完成后手动关闭对应告警。