SSL证书监控告警方案大全:5种工具横向对比
证书过期是运维的常见噩梦。网站突然变”不安全”、用户投诉、SEO掉排名——而这一切只需要一次忘续签。
解决方案是证书监控告警。 本文介绍5种主流方案,从免费到企业级,适合不同规模站点。
为什么需要证书监控
1. 有效期越来越短
2026年起证书有效期缩短到200天,未来还要降到47天。手动续签不可持续。
2. 自动续签可能失败
acme.sh、Certbot配置的自动续签不是100%可靠。DNS API密钥过期、Web服务器配置变更、cron停止等都可能导致续签失败。
3. 多证书管理难
企业可能有几十上百张证书,分布在多台服务器、多个CDN、多个云厂商。手动跟踪不可能。
4. 过期成本高
证书过期导致网站”不安全”,用户跳出率飙升、SEO排名下降、电商订单流失。一次过期的损失可能超过一年监控成本。
方案一:Uptime Robot(推荐免费方案)
Uptime Robot是免费的网站监控工具,支持SSL证书监控。
特点:
- •免费50个监控项
- •支持HTTP监控 + SSL证书监控
- •邮件、Telegram、Slack告警
- •5分钟检查间隔
配置步骤:
- 注册uptimerobot.com账号
- 添加监控 → 类型选”HTTPS”
- 填入网站URL
- 勾选”Monitor SSL Certificate”
- 设置告警间隔(建议提前7天、1天两次告警)
优势:免费、配置简单、支持多渠道告警
劣势:只能监控公网可访问的证书、不监控内网
方案二:宝塔面板自带监控
宝塔面板有SSL证书管理功能,到期会提醒。
配置步骤:
- 宝塔面板 → 网站 → 找到站点
- 点”SSL” → 查看证书到期时间
- 宝塔会在到期前30天、7天在面板首页提醒
优势:不用额外装工具、和网站管理一体化
劣势:只监控宝塔管理的站点、告警方式单一(面板内提醒)
方案三:Certbot/acme.sh自带的续签检查
如果你用Certbot或acme.sh自动续签,可以配置监控确保续签成功。
Certbot方案
配置续签后执行脚本:
certbot renew \
--deploy-reload-hook "systemctl reload nginx" \
--post-hook "/etc/letsencrypt/renew-hook.sh"
/etc/letsencrypt/renew-hook.sh 内容:
#!/bin/bash
# 续签成功后发送通知
curl -X POST https://your-webhook.com/notify \
-d "message=SSL证书续签成功: $(date)"
acme.sh方案
acme.sh --install-cert -d example.com \
--reloadcmd "systemctl reload nginx" \
--notify-hook "/path/to/notify.sh"
优势:和续签流程一体化、免费
劣势:续签失败才有告警、不能提前预警
方案四:Prometheus + blackbox_exporter(企业级)
适合有多台服务器、需要集中监控的场景。
架构:
- •blackbox_exporter:探测HTTP/TCP/ICMP,含证书信息
- •Prometheus:采集和存储指标
- •AlertManager:告警分发
- •Grafana:可视化
配置示例:
blackbox.yml:
modules:
http_2xx:
prober: http
timeout: 5s
http:
method: GET
valid_status_codes: [200]
tls_config:
insecure_skip_verify: false
prometheus.yml:
scrape_configs:
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://example.com
- https://api.example.com
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115
告警规则 ssl_rules.yml:
groups:
- name: ssl
rules:
- alert: SSLCertExpiringSoon
expr: probe_ssl_earliest_cert_expiry - time() < 86400 * 7
for: 5m
labels:
severity: warning
annotations:
summary: "SSL证书即将过期"
description: "{{ $labels.instance }} 证书将在7天内过期"
优势:功能强大、可监控几百上千个证书、告警规则灵活
劣势:部署复杂、需要运维经验
方案五:商业SSL监控服务
SSL.com
提供企业级证书监控,支持多CA证书集中管理。
特点:
- •监控所有CA签发的证书
- •自动发现子域名证书
- •API集成
- •团队协作
DigiCert CertCentral
DigiCert的证书管理平台,适合用DigiCert证书的企业。
特点:
- •和DigiCert证书签发一体化
- •多用户、多团队
- •自动续签
- •合规报告
适合:中大型企业、证书数量多、有合规要求
自己实现监控脚本
如果不想用现成工具,可以写个简单脚本:
#!/bin/bash
# ssl-monitor.sh
# 用法:ssl-monitor.sh example.com 7
DOMAIN=$1
WARN_DAYS=${2:-7}
EXPIRY_DATE=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null \
| openssl x509 -noout -enddate 2>/dev/null \
| cut -d= -f2)
EXPIRY_EPOCH=$(date -d "$EXPIRY_DATE" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( (EXPIRY_EPOCH - NOW_EPOCH) / 86400 ))
if [ $DAYS_LEFT -lt $WARN_DAYS ]; then
# 发送告警(邮件、钉钉、企业微信等)
echo "警告:$DOMAIN 证书将在 ${DAYS_LEFT} 天后过期" | mail -s "SSL证书告警" admin@example.com
fi
加入cron每天执行:
0 9 * * * /path/to/ssl-monitor.sh example.com 7
监控告警渠道
| 渠道 | 优势 | 推荐场景 |
|——|——|———-|
| 邮件 | 通用、免费 | 基础告警 |
| 钉钉机器人 | 即时、免费 | 团队运维 |
| 企业微信 | 即时、免费 | 企业环境 |
| Telegram | 即时、免费 | 个人站长 |
| Slack | 国际通用 | 跨国团队 |
| 短信 | 必达、收费 | 关键证书 |
| 电话 | 必达、收费 | 金融级 |
监控最佳实践
1. 多级告警
到期前30天、7天、1天分别告警,给自己留足处理时间。
2. 监控多个维度
- •证书有效期
- •证书链完整性
- •证书域名匹配
- •加密套件强度
3. 监控所有证书
不只监控网站证书,还要监控:
- •API接口证书
- •邮件服务器证书
- •数据库SSL证书
- •内网服务证书
- •CDN证书
- •负载均衡器证书
4. 告警要可执行
告警内容包含:
- •哪个域名/服务器
- •证书到期时间
- •续签命令/文档链接
- •负责人
5. 定期演练
每季度模拟一次证书过期,验证告警是否及时、续签流程是否正常。
结语
证书监控告警是运维的基本功。无论选哪种方案,关键是能及时发现问题、能自动通知到人。从免费的Uptime Robot开始,规模大了再上Prometheus,总能找到适合的方案。