申请 SSL 证书时,如果域名无法通过 HTTP 文件验证,或者需要申请泛域名证书,就需要使用 DNS-01 验证。
DNS 验证的核心是在 DNS 中添加一条 _acme-challenge TXT 记录,用来证明你拥有该域名的控制权限。从解析记录的手动添加、主流 DNS 厂商的 API 自动续签,到 CNAME 委托与多层级泛域名的适配,DNS-01 验证绕过了 Web 服务器公网暴露的限制。
一、 子域名 DNS 验证是什么?为什么需要 TXT 记录?
1. DNS-01 验证的核心逻辑
DNS 验证(DNS-01)是 ACME 协议中用于证明域名控制权的一种方式,适用于主域名及任意子域名(如 api.example.com、mail.example.com)。其核心逻辑是:CA 要求你在该子域名的 DNS 区域中添加一条由 CA 指定的 TXT 记录(如 _acme-challenge.api.example.com),验证成功后即确认你对该子域名具备管理权限。
2. 为什么添加 TXT 记录就能证明域名所有权?
域名解析记录由域名所有者控制。CA 机构无法直接判断后端服务器由谁管理,但可以验证 DNS 中的特殊记录是否由合法的申请者添加。因此,只要申请者能够修改对应域名的 DNS 解析,就证明其拥有该域名的完全控制权。
二、 子域名 DNS 验证和主域名验证有什么区别?
在配置证书时,不同的域名形态对应的 DNS 记录添加位置有所不同:
| 域名形态 | 示例 | 对应的 TXT 记录主机名位置 |
|---|---|---|
| 主域名 | example.com | _acme-challenge.example.com |
| 子域名 | api.example.com | _acme-challenge.api.example.com |
| 泛域名 | *.example.com | _acme-challenge.example.com(继承主域) |
泛域名证书默认只匹配一个层级的子域名。例如 *.example.com 可以匹配 api.example.com,但无法匹配 s.api.example.com(两级及以上子域名需要单独申请对应层级的泛域名或使用多域名 SAN 证书)。
三、 子域名 DNS 验证的适用场景
与 HTTP-01 验证不同,DNS-01 不依赖 Web 服务器的公网可访问性,因此特别适合以下场景:
- 子域名未指向公网服务器,无法接收外部 HTTP 请求。
- 网站接入 CDN、高防 IP 或 WAF 后,流量在边缘节点终止,无法直接通过 HTTP 回源路径验证。
- 需批量签发泛域名证书(
*.example.com)时,必须通过 DNS 验证主域名,且所有子域名继承该授权。
关于免费证书在各类验证中的具体应用,可参考 免费SSL证书是什么 的相关说明。
四、 自动化 DNS 验证配置(以 acme.sh 为例)
在实际生产环境中,为了应对 90 天短周期证书的高频续签,通常会结合主流 DNS 提供商的 API 实现自动化写入与删除 TXT 记录。
1. 单子域名 DNS 自动验证示例(以阿里云为例)
Bash
export Ali_Key="你的AccessKeyId"
export Ali_Secret="你的AccessKeySecret"
acme.sh --issue --dns dns_ali -d api.example.com
2. 泛域名 DNS 自动验证示例
Bash
acme.sh --issue --dns dns_ali -d example.com -d "*.example.com"
主流自动化工具(如 Certbot + DNS 插件、acme.sh)均支持主流 DNS 提供商(如 Cloudflare、阿里云 DNS、腾讯云 DNSPod)的 API。若 DNS 提供商不开放 API,则需手动添加并等待 TTL 生效(通常 60–300 秒),再触发 CA 检查。
完成证书签发后,即可进行下一步操作。关于证书文件的具体存放位置与 Web 服务挂载方法,可参阅 怎么安装SSL证书 的操作指南。
五、 子域名 DNS 验证最容易踩的 4 个坑与排查
在实际操作子域名 DNS 验证时,若遇到验证失败,通常与以下细节有关:
1. CNAME 冲突与委托问题
- 子域名(如
dev.example.com)如果 CNAME 到了第三方 SaaS 平台(如 Vercel、GitHub Pages),而你无权操作其 DNS 区域,则无法直接完成 DNS 验证。 - DNS-01 允许
_acme-challenge使用 CNAME 委托验证;但同一个主机名不能同时存在普通的 TXT 记录和冲突记录,如果此前配置过其他 CA 的验证,需要清理旧记录。
2. TXT 记录名称拼写错误
例如 CA 要求为 _acme-challenge.test.sub.example.com 添加记录,不可误写为 _acme-challenge.sub.example.com 或遗漏前缀下划线。
3. DNS 缓存与 TTL 未生效
添加完 TXT 记录后立即触发验证,部分地区的权威 DNS 或递归 DNS 存在 TTL 缓存,导致 CA 查不到最新记录。建议等待 1 到 5 分钟后再执行签发命令。
4. 证书类型限制
部分免费 SSL 证书(如基于 Let's Encrypt 的凭证)完全支持子域名 DNS 自动验证;而企业级证书(如 OV SSL 证书、EV SSL 证书)通常需要人工配合审核或通过专用系统验证,具体可参考 SSL证书选购指南 中的合规要求。如果在此过程中遇到解析或握手报错,可参阅 修复SSL证书错误 进行排查。
常见问题解答
Q:DNS 验证需要开放服务器的 80 端口吗?
A:不需要。DNS-01 验证只检查 DNS 区域中的 TXT 记录,不依赖服务器的 HTTP 服务。因此即使服务器关闭 80 端口、部署在纯内网环境中,也可以顺利完成证书验证。
Q:删除 DNS 验证的 TXT 记录后,已安装的 SSL 证书会失效吗?
A:不会。TXT 记录仅用于向 CA 证明域名控制权,其生命周期只在签发和续签验证阶段有效。证书成功签发并部署到服务器后,删除验证用的 TXT 记录不会影响正常的 HTTPS 访问。
Q:为什么添加了 TXT 记录后,CA 检查依然提示验证失败?
A:核心原因通常有两个:一是 DNS 记录尚未在全球生效或未过 TTL 缓存时间,建议等待几分钟后再重试;二是 TXT 记录的主机记录(域名前缀)填写错误,例如漏掉了 _acme-challenge 前缀或层级嵌套错误。



京公网安备11010502031690号
网站经营企业工商营业执照
















