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 指令碼中進行證書鏈監控。