SSL 证书自动续期失败怎么办?DNS、80端口与证书链排查

2026-09-19

直接答案:SSL 证书自动续期失败时,先确定使用的是 HTTP-01、DNS-01 还是其他 ACME 挑战,再读取续期日志中的具体域名和错误。HTTP-01 重点查 DNS、80 端口、/.well-known/acme-challenge/ 路由和 CDN/WAF;DNS-01 重点查 _acme-challenge TXT、DNS API 权限、传播和旧记录;签发成功但网站仍显示旧证书,则查证书文件路径、服务重载、SNI 与 CDN 证书。

不要在证书即将过期时才首次测试自动化。续期任务应定期做 dry-run,并对剩余天数告警。也不要通过关闭所有防火墙或把 DNS API 全权限令牌长期留在脚本中来“解决”验证失败。

先识别挑战类型

挑战 验证内容 常见阻断点 适合场景
HTTP-01 CA 从 80 端口读取指定文件/响应 DNS错误、80封闭、跳转、Webroot、WAF 单域名、可公开 HTTP 入口
DNS-01 查询 _acme-challenge TXT API权限、传播、DNS托管错误、旧记录 通配符、无公网 Web 入口
TLS-ALPN-01 443 上特定 ALPN 验证 代理、负载均衡、443接管 支持该方式的客户端与架构

通配符证书通常需要 DNS-01。仅把 *.example.com 指向服务器并不能完成域名控制验证。选择挑战方式要与 DNS 托管、CDN、负载均衡和安全边界匹配。

HTTP-01 失败怎样排查

先从公共 DNS 查询证书中的每个域名,确认 A/AAAA 都指向承接挑战的入口。一个失效的 AAAA 可能让部分验证请求走到错误服务器。再从公网请求挑战路径,确认不是登录页、403、404、HTML 挑战或其他站点内容。

重点检查:

  1. 80/TCP 是否被安全组、系统防火墙或运营商阻断;
  2. Nginx/Apache 对挑战目录的规则是否早于全站重写;
  3. HTTP→HTTPS 跳转、CDN Workers 或 WAF 是否改写挑战;
  4. 多台源站是否都能读到同一挑战内容;
  5. Certbot 使用的 Webroot 是否与线上站点根目录一致。

不要看到“连接超时”就改证书文件。那说明 CA 还没到签发阶段。若 Web 已出现 502 或 504,可结合服务器 502 和 504 排查清单继续定位回源与上游服务。

DNS-01 失败怎样排查

用权威 DNS 和多个公共递归解析器查询 _acme-challenge.域名 TXT。确认记录加在实际权威托管商,而不是旧面板;CNAME 委派时要沿链查到最终 TXT。自动化令牌只授予目标 DNS Zone 的最小编辑权限,并放在受限文件或密钥系统中。

“面板里已出现”不等于全球权威查询已可见。DNS API 返回成功后,应等待权威服务器实际响应;若客户端支持传播等待参数,应按真实 DNS 传播调整,而不是盲目重试。旧 TXT 可以并存于某些验证流程,但自动化脚本应避免无限堆积并保留审计。

时间、账户和频率限制

系统时间偏差会影响 TLS 和签名判断,应先校准 NTP。检查 ACME 账户目录、私钥权限、客户端版本和计划任务运行用户;手工用 root 成功而定时任务失败,常见原因是环境变量、工作目录、PATH 或凭据权限不同。

连续失败重试可能触发 CA 频率限制。应先使用 staging 或 dry-run 修复配置,不要每分钟向生产 CA 申请新证书。日志中要区分“订单创建失败”“挑战失败”“证书下载成功但部署失败”。

签发成功但网站仍是旧证书

这是部署阶段问题。核对 Web 服务实际引用的是 fullchain 和对应私钥,文件软链接是否更新,证书与私钥是否匹配。先用服务配置测试命令验证,再平滑 reload;若 reload 失败,应保留旧进程继续服务并立即回滚配置。

经 CDN 时,浏览器看到的是边缘证书,源站还有另一张证书。两段都要分别检查。多域名服务器用 SNI 选证书,直接访问 IP 看到默认站证书并不能证明域名配置错误。

证书链与客户端兼容

服务端通常应发送叶子证书和必要中间证书,不应发送根证书。链不完整可能在某些桌面浏览器正常、旧设备或 API 客户端失败。用外部 TLS 工具和至少两类客户端验证域名、有效期、签发者、链和协议,而不是只看浏览器地址栏。

证书类型与适用场景可参考SSL 证书怎么选。若准备换服务器,应把 ACME 账户、DNS API、挑战路由和部署 Hook 一起纳入低停机迁移清单。

一套安全的续期演练

  1. 记录当前线上证书指纹、有效期、文件路径和服务配置。
  2. 在不签发生产证书的模式运行 dry-run,保存日志。
  3. 验证挑战路径或 TXT 在外部可见。
  4. 测试部署 Hook 的配置校验与平滑 reload。
  5. 从外部带 SNI 读取新证书,确认实际生效。
  6. 模拟失败,确认旧证书和服务不被破坏。
  7. 设置剩余 30/14/7 天等多级告警,并检查任务最近成功时间。

若需要一个隔离环境演练证书和部署,可查看美国轻量云或美国弹性云服务器的实时配置;测试域名和生产密钥应分离。

续期后的验收

验收不止看命令退出码。要确认:证书包含全部预期域名;外部 443 返回新指纹与新有效期;链完整;Nginx/Apache 配置通过;核心页面、API 和回调正常;CDN 到源站严格 TLS 正常;自动任务下次运行时间、日志和告警可见。删除临时全开规则和测试 TXT,并保留上一张证书的受控回滚副本。

常见问题

80 端口全站跳到 HTTPS 会导致 HTTP-01 失败吗?

不一定,ACME 可以处理部分跳转,但挑战路径必须最终可公开正确读取。复杂重写、跨域跳转或 WAF 可能造成失败,应直接测试该路径。

通配符证书能用 HTTP-01 吗?

通常不能,ACME 通配符验证需要 DNS-01。以所用 CA 和客户端当前文档为准。

certbot renew 成功为什么浏览器还是旧证书?

可能服务没有 reload、配置引用了另一文件、CDN 提供边缘证书,或连接命中了另一节点。比较外部证书指纹与本地文件。

可以手工把新证书覆盖到旧路径吗?

有中断和权限风险。应使用客户端部署机制,先校验证书/私钥和服务配置,再原子更新或平滑重载。

证书还剩一天再处理来得及吗?

风险很高。DNS 传播、频率限制、账户和服务重载都可能耗时,应提前演练并设多级告警。

官方参考资料

最近更新