凌晨值班,证书还剩12天,网站也能正常建立TLS连接,自动续期任务却连续报错;几天后若仍未处理,线上入口就会触发过期告警。当前可用只证明旧证书仍在服务,并不代表ACME授权、DNS验证和部署链路健康。正确做法是沿验证、签发、部署、缓存四段逐层定位,而不是反复重启脚本。尤其要分清临时解析故障与长期配置失效,避免把偶发网络抖动误判为证书问题。
如果你正在选机器,或者想先把线路和配置跑通再谈长期方案,可以先看看这几家的线路说明和技术参数:aspirehosting(海外服务器),先看清带宽线路、流量策略和退款条款,再决定要不要迁。
ACME续期流程不是一次下载,而是账户授权、订单、质询、签发和下载组成的状态机。使用DNS-01验证时,客户端须经DNS API写入与授权绑定的TXT记录,权威DNS返回正确值后,CA才会签发新证书。“order failed”只是上层结果,必须继续查看具体授权与质询状态。
排障时先固定失败域名、账户、订单号和时间,再直接询问权威名称服务器:TXT值是否对应当前订单,旧值是否被误认,泛域名与多个SAN是否分别验证,CNAME委派目标是否正确。公共DNS缓存中的查询结果不足以证明记录已生效。域名验证失败时,日志出现401、403,多半是DNS凭据或权限异常;查无TXT、区域不存在,则优先检查区域、委派和传播。DNS-01绕开的是HTTP验证的80端口,不是DNS控制面权限。

用同一账户手工触发续期并保存DNS变更记录。只有授权状态变为valid且能下载新证书,才说明验证与签发已恢复;此前修改Nginx或重启负载均衡都不会修复根因。
新证书签发后也可能没有上线。实际提供TLS的可能是负载均衡、Ingress、反向代理、CDN或独立终结器,签发服务器上的文件正确,不代表这些节点已经更新。还应区分部署缓存和OCSP装订:前者是多节点或代理仍持有旧证书,后者是服务端获取证书持有者状态失败,二者不能混查。

可复现的顺序是:记录线上序列号、SAN、指纹和到期日;触发续期;确认签发;把完整证书链与私钥部署到测试节点;用openssl s_client指定目标SNI直连测试节点核对指纹;再逐批更新生产节点,最后从公网入口复测。在证书轮换窗口内,零停机轮换采用新旧证书并行加载、切流后撤旧的方式,每一步都保留可立即回退的旧版本。若新节点握手失败,立即切回旧节点,切忌同时重启全部实例。
集中巡检时,可用ServLlama记录各节点序列号、到期日和指纹,快速发现“部分节点仍旧”;最终仍以目标域名实际终结点和公网证书为准。部署时还要核对私钥匹配、证书链完整、钩子是否吞错,并确认CDN刷新没有遗漏源站证书。
ACME 客户端会为每个待续期 SAN 创建 DNS-01 验证:写入 _acme-challenge TXT 记录,再等待 CA 查询。日志里的 DNS problem、TXT 值不匹配或查询超时,通常指记录、传播或时序异常,并非证书算法问题。
常见坑是只查公共递归 DNS,没有查权威 NS;前者可能命中旧缓存。应先执行 dig +short NS example.com 找到权威服务器,再核对 TXT 值和 TTL。若多个 ACME 客户端并发使用同一 DNS API,后写入的同名记录可能覆盖先前值;应错开任务、使用独立凭证,并按客户端规则清理旧记录。
此外,域名验证失败还可能来自错误的 CNAME 委托、API 令牌缺少读写权限、限流、CAA 限制或出站 DNS 被拦截。通配符证书要用父域验证;不要用 HTTP 代理开关是否开启来判断 DNS-01 是否成功。

新证书签发不等于续期闭环。启用 OCSP 装订后,边缘节点还需取得有效的 OCSP 响应;AIA 扩展缺失、缓存过期或节点无法访问 OCSP 服务,都会造成状态异常。用 openssl s_client -status 核验时,应区分证书过期、TLS 链错误和 staple 不可用。
证书轮换窗口要覆盖 DNS 传播、签发、灰度发布和客户端缓存。先将证书与私钥成对写入临时目录,确认公钥一致,再 reload 或平滑摘流;不要直接覆盖运行中的文件。各节点、容器和 CDN 边缘都应核对序列号与到期时间,旧证书至少保留一个回滚周期。
可按以下清单执行:
date -u,从 ACME 日志提取订单 ID、失败阶段和验证记录。dig +short TXT _acme-challenge.example.com @ns1.example.net,核对值、TTL 和并发覆盖。openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null,检查线上证书、SAN 和证书链。openssl s_client -connect example.com:443 -servername example.com -status </dev/null,确认 OCSP 响应有效。最后把“续期成功”定义为:线上到期时间已延长,域名验证通过,装订正常,且所有流量节点完成轮换;否则继续保持告警,避免 ACME 续期流程只停留在脚本层面的成功。