SSL 监控不仅仅是检查过期日期。完善的监控体系需要关注:即将过期的证书、配置变更、未授权的证书签发以及 SSL 错误导致的停机。
随着证书有效期在 2029 年缩短至 47 天,主动监控变得不可或缺——错过一次续签就会让你的网站下线。
需要监控什么
| 项目 | 原因 | 频率 |
|---|---|---|
| 证书过期 | 过期证书 = 网站下线 | 每天 |
| 证书链 | 不完整的证书链 = 部分设备失败 | 每周 |
| TLS 版本 | 旧 TLS 版本会被浏览器禁用 | 每月 |
| CT 日志 | 检测为你域名未授权签发的证书 | 持续 |
| OCSP stapling | Stapling 失败会降低性能 | 每周 |
| HSTS 头 | 缺少 HSTS = 容易受到降级攻击 | 每月 |
免费监控方案
1. Cron 脚本(自托管)
#!/bin/bash
# /usr/local/bin/ssl-monitor.sh
DOMAINS="example.com www.example.com api.example.com"
WARN_DAYS=30
ALERT_EMAIL="admin@example.com"
for domain in $DOMAINS; do
expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
if [ -z "$expiry" ]; then
echo "ERROR: Can't connect to $domain:443" | mail -s "SSL Monitor: $domain unreachable" $ALERT_EMAIL
continue
fi
expiry_epoch=$(date -d "$expiry" +%s 2>/dev/null)
now_epoch=$(date +%s)
days_left=$(( (expiry_epoch - now_epoch) / 86400 ))
if [ "$days_left" -lt "$WARN_DAYS" ]; then
echo "$domain certificate expires in $days_left days ($expiry)" | mail -s "SSL Expiry Warning: $domain" $ALERT_EMAIL
fi
done
# Add to crontab — run daily at 9am
0 9 * * * /usr/local/bin/ssl-monitor.sh
2. UptimeRobot(SaaS — 免费版)
- 在 UptimeRobot 注册
- 添加监控 → 类型:HTTPS
- 输入你的域名 URL
- 设置 SSL 过期告警:过期前 30 天
- 配置告警:邮件、Slack、Webhook
UptimeRobot 每 5 分钟检查一次,对停机和证书过期都会告警。
3. Certificate Transparency 监控
监控 CT 日志 中为你域名未授权签发的证书:
| 服务 | 方式 | 费用 |
|---|---|---|
| Cert Spotter (SSLMate) | 新证书邮件告警 | 免费版 |
| crt.sh | 手动搜索 | 免费 |
| Facebook CT Monitor | Facebook 的监控工具 | 免费 |
付费监控工具
| 工具 | 功能 | 价格 |
|---|---|---|
| Better Uptime | SSL + 可用性 + 事件管理 | 免费版 / $20+/月 |
| Datadog | 完整基础设施监控含 SSL 检查 | $15+/主机/月 |
| Pingdom | SSL + 可用性 + 性能 | $10+/月 |
| StatusCake | SSL 监控 + 告警 | 免费版 / $20+/月 |
完整监控配置示例
对于生产站点,组合多个层次:
Layer 1: Certbot auto-renewal (prevents expiry)
Layer 2: Cron script (catches renewal failures — daily email)
Layer 3: UptimeRobot (catches SSL errors — 5-min checks)
Layer 4: CT monitoring (catches unauthorized certs — continuous)
这提供了纵深防御——没有单点故障。
配合 GetHTTPS 的监控
GetHTTPS 不包含内置监控(它是证书签发工具)。但你的工作流应该是:
- 用 GetHTTPS 签发证书
- 设置续签提醒 — 日历提醒在第 60 天(共 90 天)
- 添加 SSL 监控 — cron 脚本或 SaaS 工具作为备份
- 考虑 Certbot 用于生产环境的自动续签
常见问题
最低限度应该有什么监控?
至少:证书续签的日历提醒(90 天中的第 60 天)加上自动检查(cron 脚本或 UptimeRobot)。日历提醒处理正常续签;自动检查捕获失败情况。
如何监控多个域名?
上面的 cron 脚本在循环中处理多个域名。SaaS 工具如 UptimeRobot 让你添加多个监控——每个域名一个。
应该监控暂存/开发环境的证书吗?
如果它们是会过期的 Let’s Encrypt 证书,是的。过期的暂存证书会阻塞 QA 和开发。至少设置日历提醒。
如何监控证书链,而不仅是过期?
SSL Labs API 提供自动化的证书链验证。快速手动检查:
echo | openssl s_client -connect example.com:443 2>/dev/null | grep "Verify return code"
将此添加到你的 cron 脚本中进行证书链监控。