「续签成功」和「没事」是两件事
一次完整的证书更新其实有四个阶段:向证书机构申请、完成域名验证、把新证书部署到每一个 TLS 端点、确认用户实际拿到的是新证书。ACME 这类自动化工具处理的是**前两个阶段**,第三阶段依配置而定,第四阶段则几乎没有工具会自动帮你做。
问题就出在这里:续签日志显示 `success`,指的是「证书拿到了」,不是「证书在服务」。中间还隔着部署与重新加载,任何一步失败都不会反映在续签日志上。
| 监控方式 | 抓得到 | 抓不到 |
|---|---|---|
| 日历提醒 / 到期日清单 | 什么时候该处理 | 续签是否成功、是否部署 |
| ACME 工具的续签日志 | 证书有没有签发下来 | 新证书是否真的被供应 |
| 服务器本机检查证书文件 | 这台机器上的文件内容 | CDN、负载均衡器等其他端点 |
| 从外部实际连接检查 | 用户真正拿到的证书 | (这是唯一能证明没事的方式) |
下表把常见的四种监控方式摊开来看,重点在第三栏——每一种方式**抓不到什么**,那才是事故发生的地方。
三种续签成功却仍然出事的情境
以下三种都是续签日志显示成功、但用户仍看到警告的实际情况:
- 新证书没推到所有端点 如果流量经过 CDN、负载均衡器或多台后端,证书必须在每一个终止 TLS 的位置都更新。只更新了源站、CDN 节点还在供应旧证书,是最常见的一种。而且因为只有部分节点有问题,反馈会呈现「有些人说坏掉、有些人说正常」,更难判断。
- 证书与私钥不匹配 证书换了但私钥没同步更新(或反过来),服务会拒绝加载或直接供应失败。这种通常在重新加载服务时就会报错,但如果没有人在看日志,错误会被静静吞掉,服务继续用内存里的旧证书跑到过期为止。
- 文件更新了但服务没重新加载 这是最隐蔽的一种。证书文件已经是新的,本机检查也显示正常,但 Nginx、Apache 或应用程序仍在使用启动时加载到内存的旧证书。从服务器上看一切正常,从外面连进来却拿到即将过期的证书。
该监控什么,以及什么时候告警
从上面三种情境可以归纳出一个原则:**监控必须从外部发起,对着用户实际会连到的地址**。从机房内部或同一台机器检查,证明不了对外路径上每一层都拿到了新证书。
检查的内容也不该只有到期日。至少应涵盖:证书的到期时间、证书链是否完整(缺中间证书在某些客户端会失败)、供应的证书是否与预期的域名相符,以及——如果你有多个节点——每个节点是否供应同一张证书。
另外要确认的是告警送到哪里。寄到一个没人看的邮箱、或只在仪表盘上显示红点,等同于没有告警。至少要进到团队实际会看的渠道,并且指定一个负责人。
有效期缩短让这件事从次要变成必要
过去证书有效期 398 天时,一年处理一次,就算监控不完善,出错概率也有限。但有效期已在 2026 年 3 月缩短为 200 天,2027 年将降至 100 天、2029 年降至 47 天——届时一年要更新约八次。
每一次更新都是一次可能失败的机会。从一年一次变成一年八次,代表**同样的失败率会产生八倍的事故次数**。这正是为什么在短有效期时代,监控不再是「有做比较好」,而是自动化的必要配套:自动化让更新频率变得可承受,监控才能确保那些自动更新真的生效了。
三个层次的实作
从最基本到最完整,可以分阶段建立:
一、对外部端点做定期连接检查
最基本的做法是排程一个检查,对每个对外域名建立 TLS 连接,读取实际供应的证书并比对到期日。命令行上 `openssl s_client -connect <域名>:443 -servername <域名>` 就能看到服务器实际返回的证书。把它包成排程并在阈值内告警,就已经能挡掉多数事故。
二、确认覆盖所有 TLS 端点
列出所有会终止 TLS 的位置——源站、每个 CDN 节点、负载均衡器、API 域名、邮件服务器。只检查主域名会漏掉其他端点。如果 CDN 有多个节点,理想上应该从不同地区发起检查,因为节点的证书更新未必同步。
三、把部署验证接进自动化流程
更完整的做法是让续签流程本身包含验证步骤:签发并部署后,自动从外部确认新证书确实在供应,确认失败就视为整个流程失败并告警。这样「续签成功」的定义才等于「用户拿到新证书」,而不只是「证书文件下载完成」。
建立监控前该确认的三件事
在开始配置之前,先把这三项盘点清楚:
- 列出所有 TLS 端点 包含主域名、子域名、API、邮件、以及每一个 CDN 或负载均衡节点。没列进清单的端点不会被监控,而它们同样会让用户看到警告。
- 确认检查是从外部发起 监控主机必须在您的网络之外,走用户实际会走的路径。从内网检查会跳过 CDN 与外部负载均衡,那正是最容易漏掉的一层。
- 确认告警有人会看到 指定接收渠道与负责人。分层阈值设好之后,测试一次告警是否真的送达——很多监控是在出事那天才发现通知渠道早就坏了。
小结
证书自动化解决的是「更新太麻烦」,监控解决的是「更新有没有真的生效」。这两件事必须同时存在——只有自动化而没有监控,等于把一个高频率的流程完全交给没人检查的机制,而有效期缩短正在让这个频率变成一年八次。
判断监控是否足够,只需要问一个问题:**它检查的是证书文件,还是用户实际拿到的东西?** 如果是前者,那它抓不到本文提到的三种情境中的任何一种。