DNS 01 的 TXT 记录已经写入 为什么验证仍然失败

举报
yd_218044062 发表于 2026/09/21 15:19:08 2026/09/21
【摘要】 DNS-01 验证失败时,最先该确认的不是管理后台里有没有一条 TXT,而是 CA 在公网 DNS 上能否查到这次订单要求的值。后台保存成功、本机查询成功、权威 DNS 已经发布、CA 完成验证,是四个不同状态。本文从权威 DNS 入手,给出一条能留存证据的排查路径。示例域名均为 example.com,请替换后再执行。先固定这次订单的三个信息从 ACME 客户端日志中记录待验证的完整域名、...

微信图片_20260921140307_820_4.png

DNS-01 验证失败时,最先该确认的不是管理后台里有没有一条 TXT,而是 CA 在公网 DNS 上能否查到这次订单要求的值。后台保存成功、本机查询成功、权威 DNS 已经发布、CA 完成验证,是四个不同状态。本文从权威 DNS 入手,给出一条能留存证据的排查路径。示例域名均为 example.com,请替换后再执行。

先固定这次订单的三个信息

从 ACME 客户端日志中记录待验证的完整域名、挑战名称和本次期望的 TXT 值。DNS-01 通常查询 _acme-challenge.example.com;如果申请 *.example.com,授权对象在 ACME 响应中不带星号,但客户端仍会为相应授权准备挑战值。不要从上一次成功订单复制旧值,也不要把 ACME token 直接当成最终 TXT 值:客户端发布的是由 token 和账户密钥信息计算得到的值。

同一订单同时申请 example.com 和 *.example.com 时,可能出现同一个记录名下需要两个不同 TXT 值的情况。DNS 允许同名多条 TXT 记录,不能因为看见两条就随意删掉一条;先核对它们各自对应的授权。

第一步 找到真正负责回答的权威 DNS

域名注册商、DNS 控制台和实际权威服务器未必是同一家。先看公开委派,再向查出的每台权威服务器直接询问挑战记录。以下命令在 Linux 或 macOS 的 dig 中执行;如果使用 Windows,可在 WSL 或安装 DNS 工具后运行。

dig +short NS example.com
dig @ns1.example-dns.net TXT _acme-challenge.example.com +noall +answer

把 ns1.example-dns.net 换成实际 NS。若各权威服务器的答案不一致,属于权威侧尚未同步或写入了错误的 DNS 区域。此时反复向公共递归 DNS 查询、调低本地缓存或重新点“验证”,都无法替代修正权威答案。

第二步 核对记录名和值 而不是只看有无 TXT

常见错误包括:控制台自动补全域名后又手工输入完整域名,导致记录名变成 _acme-challenge.example.com.example.com;把值写到 example.com 的根记录;粘贴时带入空格或旧订单内容。先核对查询结果中的 owner name,再逐字比较本次期望值。DNS 工具显示的引号通常只是输出格式;关键是 TXT 内容是否匹配。

若使用 CNAME 或 NS 把 _acme-challenge 委派给专用验证区,沿委派链继续查最终 TXT。不能只在原区域添加一条看似正确的 TXT,却忽略实际查询已被导向另一个名称或区域。不同 CA 对委派的支持和实现应以其文档及实测为准。

dig +trace TXT _acme-challenge.example.com
dig +short CNAME _acme-challenge.example.com

第三步 再比较递归 DNS 与 CA 的观察时间

权威服务器已全部给出正确值,公共递归解析器仍返回旧值或 NXDOMAIN,通常与缓存有关。尤其要注意“先查询不存在的记录、随后才写入”的顺序:不存在的结果也可能被缓存。TTL 降低不能立即清除已缓存的旧答案。应根据 DNS 提供商的传播状态和 ACME 客户端等待参数延后触发验证,而不是无限快速重试。

dig @1.1.1.1 TXT _acme-challenge.example.com +noall +answer
dig @8.8.8.8 TXT _acme-challenge.example.com +noall +answer

公共递归解析器的结果只能辅助判断,不能证明 CA 的验证节点看到相同答案。不同地域和任播节点可能读到不同状态。若权威答案稳定而 CA 仍失败,保存订单时间、完整错误码、权威及递归查询输出,再检查 CA 所报告的查询名和期望值。

第四步 排除“DNS 正确 但签发条件仍不满足”

DNS-01 挑战通过后,订单仍可能因 CAA 限制、账户授权状态、证书策略或其他标识符的授权失败而停住。CAA 不是 TXT 挑战本身;不要把所有订单错误都归为“传播慢”。同时检查订单里每个域名的授权状态,并保留 CA 返回的错误详情。

如果脚本在验证前自动删除旧 TXT,要确认清理动作不会误删同一记录名下仍被另一授权使用的值。共享 DNS 账号还应只获授必要区域的 TXT 修改权限,避免为验证方便把整个 DNS 管理权交给 Web 服务器。

一次排查应留下什么证据

记录订单 ID、验证域名、期望 TXT、实际权威 NS、每台权威服务器的查询结果、公共递归查询时间、ACME 错误码和最终处理动作。这样下一次失败时才能区分“写错区域”“权威未同步”“递归缓存”和“挑战已通过但订单被别的条件阻止”,而不是每次都从后台截图重新猜。

GlobalSign 的实践观点:让验证过程可追踪

GlobalSign 的 Atlas ACME 服务支持证书申请、续期与吊销的自动化;但自动化发起订单,不等于 DNS-01 失败会自行消失。企业接入时仍应把 DNS 写入日志、权威查询结果和 ACME 错误信息关联到同一任务,确认验证成功后再进入部署环节。希望将签发流程纳入统一管理的团队,可查看官网的 ACME 自动化证书管理方案;具体 DNS 权限与传播检查仍由企业按自身环境落实。

参考资料

GlobalSign ACME 自动化证书管理 https://www.globalsign.cn/acme-automated-certificate-management


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。