# DNS 验证 (/docs/free-cert/dns-verification)



DNS-01 验证要求申请人在域名下添加一条指定的 TXT 记录，以此证明对该域名拥有控制权。这是本站采用的唯一验证方式，也是签发泛域名证书所必需的方式。

## 记录的格式 [#record-format]

| 字段   | 值                                                             |
| ---- | ------------------------------------------------------------- |
| 记录类型 | `TXT`                                                         |
| 主机记录 | `_acme-challenge`（部分服务商要求填写完整的 `_acme-challenge.example.com`） |
| 记录值  | 申请页面上给出的字符串，需完整复制                                             |
| TTL  | 保持默认即可                                                        |

<Callout type="warn">
  记录值必须完整复制，不要添加引号，也不要在首尾留下空格。从页面复制时请使用复制按钮，手工选择文本容易漏掉末尾字符。
</Callout>

## 同时签发泛域名时需要两条记录 [#two-records]

当一张证书同时包含 `example.com` 与 `*.example.com` 时，CA 会为两个域名各下发一个验证值，而两者对应的记录名是**同一个** `_acme-challenge.example.com`。

因此需要添加**两条主机记录相同、记录值不同的 TXT 记录**，两条都必须存在。

<Callout type="warn">
  这是本环节最常见的失败原因。部分 DNS 控制台在添加同名记录时会提示冲突，或直接用新记录覆盖旧记录。若控制台不允许同名 TXT 记录共存，请确认是否有「添加记录」以外的入口，或联系服务商确认该域名类型是否支持多值 TXT 记录。
</Callout>

## 预检查的判定方式 [#precheck]

点击「检查 DNS 记录」后，系统不会查询公共 DNS 缓存，而是先定位该域名的权威域名服务器，再逐台直接查询 TXT 记录。

这样做的原因是：公共解析器可能返回缓存的旧结果，据此判断「已生效」会导致提交给 CA 后再次失败，而 CA 的失败无法复用，只能重新发起申请。

检查未通过时，页面会说明是哪一台权威服务器返回了什么内容。这一信息具有实际的排查价值：

| 返回内容          | 通常原因                   |
| ------------- | ---------------------- |
| 未返回任何 TXT 记录  | 记录尚未生效，或添加在了错误的域名下     |
| 返回的值与预期不符     | 记录值复制不完整，或修改了旧记录而非新增记录 |
| 只返回了一个值，但需要两个 | 泛域名所需的第二条记录缺失或被覆盖      |
| 无法定位权威服务器     | 域名尚未完成注册，或 NS 记录配置有误   |

## 记录迟迟不生效时的排查顺序 [#not-propagating]

请按以下顺序确认：

1. **确认记录添加在正确的域名下。** 若申请的是 `example.com`，记录应添加在 `example.com` 的解析中，而非某个子域名下。
2. **确认主机记录的填写格式。** 不同服务商的要求不一致：部分只需填写 `_acme-challenge`，部分要求填写完整的 `_acme-challenge.example.com`。填写错误会生成 `_acme-challenge.example.com.example.com` 这样的记录名。
3. **确认域名当前的 NS 指向。** 若域名近期更换过 DNS 服务商，记录可能添加在了已不再生效的那一侧。
4. **确认是否存在 CNAME 冲突。** 若 `_acme-challenge` 已存在 CNAME 记录，同名的 TXT 记录不会生效。
5. **使用命令行直接向权威服务器查询。** 这可以排除本机与本地网络缓存的干扰：

```bash
# 先查出权威服务器
dig +short NS example.com

# 再直接向其中一台查询 TXT 记录
dig +short TXT _acme-challenge.example.com @ns1.example-dns.com
```

预期应返回一个值（仅主域名）或两个值（同时包含泛域名）。

## 验证通过之后 [#after]

预检查通过后，系统会将订单提交给 CA。CA 会**独立再验证一次**，这次验证由 CA 自行发起，本站无法干预，耗时通常在数分钟以内。

在证书签发之前，请勿删除这些 TXT 记录。签发完成后即可删除，下次续期时系统会下发新的记录值。

<Callout type="info">
  若希望免去每次续期时手工添加记录的步骤，本站提供 [DNS 委派](/docs/free-cert/dns-delegation)：将 `_acme-challenge.example.com` 通过 CNAME 指向本站，此后每次验证所需的 TXT 值由本站写入，这条 CNAME 添加一次即可。

  也可以将它指向自行搭建的验证域名，此后自己维护该域名下的 TXT 记录；此方式对本站的预检查同样有效。
</Callout>
