Let's Encrypt 证书自动续签失败怎么排查?DNS、ACME 与 45 天证书准备

先保住当前可用证书,再按验证方式、自动任务和公网生效链路逐层排查

排查 Let's Encrypt 自动续签失败,覆盖 DNS、HTTP-01、DNS-01、签发限制、Nginx 重载和 45 天证书兼容准备。

先做什么:先在证书管理页确认当前证书的到期时间和覆盖域名,再查看最近一次续签日志;不要看到续签失败就立即删除旧证书或重新申请。使用宝塔面板时,入口通常在“网站 → 目标站点 → SSL”,使用 Certbot 时先运行只读检查和模拟续签。Let’s Encrypt 默认经典证书目前仍是 90 天,证书本身免费;但官方已经提供 45 天配置并计划分阶段缩短有效期,所以续签任务必须按天运行,不能写死成每 60 天才执行一次。

数据与停机风险:排查续签通常不会修改网站数据,但删除证书、覆盖私钥、切换验证方式或错误重载 Nginx,可能让 HTTPS 暂时不可用。操作前备份当前证书目录、站点 Nginx 配置和 ACME 客户端续签配置;任何新证书都要先核对域名和有效期,再替换线上文件。

先分清“证书快到期”和“自动续签任务坏了”

浏览器仍能打开 HTTPS,不代表自动续签正常。先从证书管理页记录域名、签发机构、到期时间和证书路径,再在服务器执行下面的只读检查。把示例域名换成自己的正式域名:

echo | openssl s_client -servername www.example.com -connect www.example.com:443 2>/dev/null \
  | openssl x509 -noout -issuer -subject -dates

systemctl list-timers --all | grep -E 'certbot|acme'
certbot certificates

第一组输出证明公网当前实际提供哪张证书;定时器和客户端清单用于确认自动任务是否存在。服务器磁盘上的新证书与公网证书可能不是同一张,因此两处都要看。宝塔面板签发的证书未必由系统 Certbot 管理,若命令提示没有证书,应回到面板的续签记录和计划任务,不要在同一域名上混用多个客户端抢占配置。

默认应该怎样安排续签

Let’s Encrypt 官方建议让 ACME 客户端频繁检查是否进入续签窗口,而不是按证书签发日手工计算。支持 ACME Renewal Information(ARI)的客户端应读取官方建议时间;没有 ARI 时,也应每天至少运行一次续签检查,由客户端决定是否真正申请新证书。频繁“检查”不会等于每天重新签发。

2026 年 9 月核验时,经典配置默认仍签发 90 天证书;可选的 tlsserver 配置已经可以签发 45 天证书。官方计划在 2027 年把默认经典证书降到 64 天,2028 年进一步降到 45 天。真正需要调整的是自动化频率和监控,不是现在手工把所有证书重签一遍。

续签失败按哪条分支检查

日志或现象先检查处理方向
域名解析到旧服务器权威 DNS 的 A、AAAA、CNAME修正解析并等待 TTL,避免只改本机 hosts
HTTP-01 验证超时或 40480 端口、防火墙、CDN 回源和 /.well-known/acme-challenge/让验证路径公开到正确 Web 根目录
DNS-01 提示记录不正确TXT 记录名称、API 权限和 DNS 传播使用最小权限凭据,等待权威服务器可查询
达到签发限制是否反复删除后重签、域名集合是否不断变化停止重试,先用测试环境验证配置
证书已更新但公网仍是旧证书Nginx 实际引用路径和重载结果测试配置后重载,检查是否还有 CDN 或负载均衡终止 TLS

站点同时有 example.comwww.example.com 时,两者都必须解析到可完成验证的位置。存在 AAAA 记录时,Let’s Encrypt 可能走 IPv6;IPv6 指向错误机器也会让验证失败。使用 CDN 时还要确认验证请求是由 CDN 正确回源,还是应改用 DNS-01;不要为了通过验证永久关闭全站安全策略。

怎样安全做一次模拟续签

Certbot 用户可用测试环境执行模拟续签。它会验证续签配置和挑战流程,但不会用测试证书替换正式证书:

sudo certbot renew --dry-run
sudo nginx -t

dry-run 成功后,仍要确认正式续签任务实际启用。若修改了续签配置,先保留副本;不要直接编辑客户端生成的账户文件或私钥。宝塔用户应在面板中手动触发一次安全续签测试,并查看计划任务与日志是否记录成功;若面板使用独立 ACME 客户端,不要同时让 Certbot接管相同证书路径。

证书更新后如何验收和回退

  1. 运行 nginx -t,配置不通过就不要重载。
  2. 重载后从公网再次运行 openssl s_client,核对序列号、域名和到期时间。
  3. 分别访问裸域名、www、后台和 API,确认没有证书名称不匹配。
  4. 检查 OCSP/CRL、完整证书链、HTTP 到 HTTPS 跳转和监控告警。
  5. 记录下一次自动检查时间,并为剩余天数建立提前告警。

新证书导致异常时,恢复备份的证书文件和 Nginx 引用路径,执行配置测试后再重载。旧证书尚未过期时可以作为短期回退,但不能把恢复旧证书当成修复自动续签。需要继续排查 DNS 或服务器时间时,可参考Linux DNS 解析排查Ubuntu 时间同步检查;Nginx 配置入口可参考Nginx HTTPS 配置教程

官方依据

云服务器教程Vue、React 单页应用刷新后 404 怎么办?Nginx History 路由与 API 分流2026-09-13云服务器教程Docker 提示 pull access denied 怎么办?镜像名、仓库权限与登录排查2026-09-13云服务器教程MySQL 报 ERROR 1205 Lock wait timeout 怎么办?阻塞事务与安全止损2026-09-12

加入开发者交流社区

与全球开发者、运维和工作室一起交流技术、分享经验、配置、账号与最新优惠信息

  • 云平台使用交流
  • 资源优惠信息
  • 最新教程与资讯
  • 开发者经验分享
联系 Telegram 客服
加入开发者交流社区