HTTPS 证书过期怎么排查:查看有效期、续期失败的原因和监控方法
早上打开公司网站,浏览器突然提示“您的连接不是私密连接”,错误代码里带着 CERT_DATE_INVALID——这通常意味着 HTTPS 证书过期了。证书过期是最常见、也最容易预防的线上事故之一。这篇文章讲怎么确认问题、怎么查到期时间、自动续期为什么会失败,以及怎样提前发现。
一、证书为什么会过期
HTTPS 证书由证书颁发机构(CA)签发,里面写明了生效时间(Not Before)和到期时间(Not After)。到期后浏览器不再信任它。证书有效期设计得有限,是为了降低私钥泄露后的长期风险。行业的趋势是有效期越来越短,例如 Let's Encrypt 的证书有效期通常为 90 天,CA/浏览器论坛也已通过逐步缩短证书最长有效期的规则,具体时间表以 CA 公告为准。有效期越短,越要依赖自动续期。
二、先确认是不是过期
浏览器提示“不安全”不一定都是过期,常见原因还有:域名与证书不匹配、证书链不完整、电脑时间不对。区分方法:
- 看错误代码:Chrome 中
NET::ERR_CERT_DATE_INVALID是日期问题;ERR_CERT_COMMON_NAME_INVALID是域名不匹配;ERR_CERT_AUTHORITY_INVALID多为证书链或自签名问题。 - 检查本机时间:如果只有一台电脑报日期错误,先看它的系统时间是否正确。
- 换设备、换网络访问:如果所有设备都报错,问题在服务器端。
三、查看证书有效期
浏览器:点击地址栏左侧的图标,查看连接安全信息和证书详情,可以看到颁发者、有效期起止时间和包含的域名。
命令行(openssl):
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -dates -subject -issuer
输出中的 notAfter= 就是到期时间,注意它是 GMT(UTC)时间,换成北京时间要加 8 小时。-servername 参数很重要:一台服务器托管多个网站时,不带它可能拿到别的网站的证书,看到错误的结果。
检查本地证书文件:
openssl x509 -in fullchain.pem -noout -enddate
证书文件是 PEM 格式,中间那段文本其实是 Base64 编码的二进制数据,所以用文本编辑器打开只能看到一串字母。
四、自动续期为什么失败
很多网站使用 certbot、acme.sh 等 ACME 客户端自动续期,或者托管在自带证书管理的云平台和 CDN 上。续期失败的常见原因:
- 验证失败:HTTP-01 验证需要 CA 能通过 80 端口访问
/.well-known/acme-challenge/。如果防火墙关了 80 端口、网站强制跳转配置有误、或者前面加了 CDN 拦截,验证就会失败。 - DNS 验证凭据失效:使用 DNS-01 验证(通配符证书必须用它)时,DNS 服务商的 API 密钥过期或被删除。
- 续期成功但没生效:新证书已经下载,但 Web 服务器没有重新加载,仍在使用内存里的旧证书。需要在续期后执行 reload(如
nginx -s reload),certbot 可以用部署钩子自动完成。 - 定时任务没在运行:服务器迁移、重装后,cron 或 systemd 定时器没有恢复。
- 域名解析变了:域名已经指向新服务器,但续期还在旧服务器上进行。
- 多处部署:同一张证书部署在负载均衡、CDN、源站等多个位置,只更新了一处。
五、紧急处理步骤
- 手动执行一次续期,例如
certbot renew,仔细阅读报错信息。 - 根据报错修复验证问题(端口、跳转、DNS 凭据)。
- 续期成功后重新加载 Web 服务器。
- 用上面的 openssl 命令再次检查线上证书的
notAfter,确认已更新。 - 检查 CDN、负载均衡等其他位置的证书是否也需要更新。
六、建立到期提醒
- 续期演练:certbot 可以用
certbot renew --dry-run测试续期流程是否正常,建议在每次服务器改动后跑一次。 - 定时检查脚本:用 cron 每天运行 openssl 命令,计算距离到期的天数,少于 14 天时发邮件或消息提醒。Cron 的写法可以参考 Cron 表达式怎么写。
- 使用监控服务:很多网站监控服务提供证书到期提醒,选择适合自己的即可。
- 登记清单:把所有域名、证书部署位置、续期方式和负责人列成表,人员变动时交接清楚。
七、小结
证书过期几乎都是流程问题而不是技术难题:自动续期 + 续期后自动重载 + 独立的到期监控,三者都做到,就很少再遇到这种事故。脚本里常见的到期时间如果是时间戳,可以用本站的 时间戳转换工具 换算;首页“网络”分类也收录了在线 SSL 检测工具,可以从外部再检查一次。