最实用方法是直接用 openssl 命令本地查剩余天数、验证证书链完整性、模拟浏览器握手;再结合 cron 定时检查+邮件告警,或接入专业监控平台,并确认 certbot 自动续期正常运行。

直接查剩余天数最实用,不用等告警才行动。
用 OpenSSL 命令本地快速验证
这是最轻量、不依赖外部服务的方式,适合所有 Linux 服务器。以 Let’s Encrypt 证书为例(路径如 /etc/letsencrypt/live/example.com/fullchain.pem):
- 查剩余天数:
openssl x509 -in /path/to/fullchain.pem -noout -enddate | awk '{print $4, $5, $7}' | xargs -I{} date -d "{}" +%s 2>/dev/null | xargs -I{} echo $(( ({} - $(date +%s)) / 86400 ))输出正数即剩余天数,负数表示已过期。 - 验证书链是否完整:
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt /path/to/fullchain.pem返回 OK 才算可信;若提示 unable to get issuer certificate,说明中间证书缺失或顺序错误。 - 模拟真实浏览器握手(带 SNI):
openssl s_client -connect example.com:443 -servername example.com -showcerts 2>/dev/null | openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt输出含 verify return:1 表示浏览器能正常信任。
加定时检查 + 邮件告警(基础自动化)
光手动查不够,得让系统自己盯紧。推荐用 cron 每天执行一次检测脚本:
- 写个简单 shell 脚本,调用上面的 OpenSSL 命令,判断剩余天数是否 (建议阈值,留足处理时间);
- 触发条件成立时,用
mail或sendmail发邮件到运维邮箱; - 把脚本加入 crontab:
0 3 * * * /path/to/check-ssl.sh(每天凌晨三点执行)。
对接专业监控平台(适合多服务器/企业环境)
当证书数量超过 5 张、服务器分散在不同地域或云厂商时,人工+脚本就力不从心了。可选用支持 SSL 证书专项监控的平台,例如锐安信 SSL 自动化运维系统:
- 自动发现证书(支持 Nginx/Apache/TLS 端口扫描);
- 实时抓取有效期、签发机构、密钥算法、证书链完整性等字段;
- 配置分级告警(如
- 集成企业微信/钉钉/邮件/短信,支持多人通知和值班轮转。
别忘了验证自动续期是否真在跑
很多故障不是证书没续,而是续期任务失效了。务必确认:
- Certbot 的 systemd timer 是否启用:
systemctl list-timers | grep certbot; - 或检查 cron:
sudo crontab -l | grep certbot; - 手动运行一次测试:
sudo certbot renew --dry-run,看到 The dry run was successful 才算真正可靠。











