SSL证书监控告警方案大全:5种工具横向对比

a
admin
作者
2026-07-17
发布日期
约 11 分钟
阅读时间

证书过期是运维的常见噩梦。网站突然变”不安全”、用户投诉、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分钟检查间隔

配置步骤

  1. 注册uptimerobot.com账号
  2. 添加监控 → 类型选”HTTPS”
  3. 填入网站URL
  4. 勾选”Monitor SSL Certificate”
  5. 设置告警间隔(建议提前7天、1天两次告警)

优势:免费、配置简单、支持多渠道告警

劣势:只能监控公网可访问的证书、不监控内网

方案二:宝塔面板自带监控

宝塔面板有SSL证书管理功能,到期会提醒。

配置步骤

  1. 宝塔面板 → 网站 → 找到站点
  2. 点”SSL” → 查看证书到期时间
  3. 宝塔会在到期前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,总能找到适合的方案。

本文到此结束