# DNS-01（DNS-01 验证）是什么？定义、例子与常见误区

> DNS-01 是一种 ACME 验证方式，客户端在 _acme-challenge 子域名下发布由 CA 质询计算出的 TXT 记录来证明域名控制权。

Source: https://ssl.sh/zh/glossary/dns-01/
Last updated: 2026-11-10

DNS-01 是通过 DNS 完成验证的 [ACME](https://ssl.sh/zh/glossary/acme/) 质询。客户端对密钥授权内容做 SHA-256 摘要并进行 base64url 编码，作为 TXT 记录发布到 _acme-challenge.example.com；CA 从多个网络视角查询这个名字并比对取值。它是唯一能验证[通配符证书](https://ssl.sh/zh/glossary/wildcard-certificate/)的 ACME 方法，服务器完全不对公网开放时也能使用。

## 为什么重要
DNS-01 让证书与 Web 服务器解耦：一台持有 DNS API 密钥的机器就能为内网主机、负载均衡集群或通配符域名申请证书，再分发部署。代价在于安全和时序：DNS API 密钥权限很大，应尽量缩小授权范围（例如阿里云 RAM 子账号只授予云解析权限）；记录必须在所有权威服务器上生效后 CA 才能查到。常见的加固做法是把 _acme-challenge 用 CNAME 指向一个单独的域，ACME 客户端只需要那个域的写权限。[CAA](https://ssl.sh/zh/glossary/caa/) 记录照常生效。

## 例子
用 acme.sh 调用 DNSPod 接口，同时申请主域名和通配符证书：

```bash
export DP_Id="<id>" DP_Key="<key>"
acme.sh --issue --dns dns_dp -d example.com -d '*.example.com'

# 查看 CA 将会看到的记录
dig TXT _acme-challenge.example.com +short
```

使用阿里云云解析时，把插件换成 dns_ali，并设置 Ali_Key、Ali_Secret 即可。

## 常见误区
- **DNS-01 需要网站服务器在线。** 它只依赖 DNS，服务器可以离线或只在内网。
- **TTL 设得小，记录就能立刻生效。** TTL 影响的是缓存时间，而不是 DNS 服务商把记录同步到所有权威服务器的速度。
- **通配符证书包含主域名。** *.example.com 并不匹配 example.com，需要同时申请两个名字，此时同一个 _acme-challenge 下会有两条 TXT 记录。

## 相关术语

- [ACME](https://ssl.sh/zh/glossary/acme/): ACME 是 IETF 标准协议（RFC 8555），让软件自动向 CA 证明域名控制权，并自动申请、续期和吊销证书。
- [DCV](https://ssl.sh/zh/glossary/dcv/): DCV 即域名控制权验证，是 CA 在签发证书前确认申请者确实控制证书中每一个域名的检查。
- [HTTP-01](https://ssl.sh/zh/glossary/http-01/): HTTP-01 是一种 ACME 验证方式，客户端通过 80 端口以普通 HTTP 提供 CA 指定的令牌内容来证明域名控制权。
- [通配符证书](https://ssl.sh/zh/glossary/wildcard-certificate/): 通配符证书是名称以星号开头（如 *.example.com）、可匹配该域名下任意一级子域名的 TLS 证书。
- [MPIC](https://ssl.sh/zh/glossary/mpic/): MPIC 是要求 CA 从多个网络位置重复进行域名验证和 CAA 检查、只有足够多位置结果一致才签发证书的规则。
- [DNSSEC](https://ssl.sh/zh/glossary/dnssec/): DNSSEC 是一组 DNS 扩展，让解析器能沿着从根区开始的签名链，验证 DNS 应答确实来自权威方且未被篡改。
- [CAA 记录](https://ssl.sh/zh/glossary/caa/): CAA 记录是一种 DNS 记录，用来声明哪些证书颁发机构可以为该域名签发证书，所有公共 CA 签发前都必须检查。
