所有入门指南 快速开始

DNS-01 验证:工作原理与操作指南

DNS-01 是支持通配符证书*.example.com)的 ACME 验证类型。它通过在 DNS 中添加 TXT 记录来证明域名所有权 — 不需要 Web 服务器或 80 端口访问权限。

工作原理

  1. Let’s Encrypt 为每个域名提供一个 token
  2. GetHTTPS 对 key authorization 计算 SHA-256 摘要并进行 base64url 编码
  3. 你在 _acme-challenge.yourdomain.com 创建一条 TXT 记录,值为该编码结果
  4. Let’s Encrypt 通过公共 DNS 查询该 TXT 记录
  5. 如果值匹配,验证通过,证书即被签发

使用 GetHTTPS 时,第 1-2 步自动完成 — 你只需将记录名称和值复制粘贴到 DNS 服务商中。

分步设置

第一步:从 GetHTTPS 获取 TXT 记录信息

GetHTTPS 会显示:

  • 记录名称_acme-challenge.yourdomain.com
  • 记录值:一个 base64url 编码的字符串(约 43 个字符)

第二步:在 DNS 服务商添加 TXT 记录

字段
类型TXT
名称_acme-challenge(某些服务商会自动追加域名)
GetHTTPS 显示的字符串 — 直接复制粘贴
TTL60 秒(或服务商允许的最低值)

各服务商操作说明:

Cloudflare

  1. Dashboard → 你的域名 → DNSRecordsAdd record
  2. Type: TXT,Name: _acme-challenge,Content: 粘贴值
  3. TTL: Auto
  4. 点击 Save

AWS Route 53

  1. Hosted zones → 你的域名 → Create record
  2. Record name: _acme-challenge
  3. Record type: TXT
  4. Value: "paste-value-here"(必须包含双引号 — Route 53 要求如此)
  5. TTL: 300
  6. 点击 Create records

GoDaddy

  1. DNS ManagementAdd
  2. Type: TXT,Name: _acme-challenge,Value: 粘贴值
  3. TTL: 1 Hour(最低可选值)
  4. 点击 Save

Namecheap

  1. Domain ListManageAdvanced DNSAdd new record
  2. Type: TXT,Host: _acme-challenge,Value: 粘贴值
  3. TTL: Automatic
  4. 点击 Save all changes

Google Cloud DNS

gcloud dns record-sets create _acme-challenge.yourdomain.com. \
  --zone=your-zone --type=TXT --ttl=60 --rrdatas="the-value"

DigitalOcean

  1. NetworkingDomains → 你的域名 → Add record
  2. Type: TXT,Hostname: _acme-challenge,Value: 粘贴值
  3. TTL: 30

第三步:等待 DNS 传播

DNS 变更需要 1-15 分钟,具体取决于服务商和 TTL 设置。GetHTTPS 的预检功能会在提交给 Let’s Encrypt 之前验证 TXT 记录是否已从公网可见。

手动检查传播状态:

dig TXT _acme-challenge.yourdomain.com +short
# Should return your value (in quotes)

你也可以使用在线传播检测工具查看记录是否在全球可见。

第四步:在 GetHTTPS 中验证

点击 Verify。GetHTTPS 将向 Let’s Encrypt 提交验证请求。如果 TXT 记录正确,证书即被签发。

第五步:清理

证书签发后,删除 DNS 中的 _acme-challenge TXT 记录。它不再需要,残留的过期记录可能在续签时造成混淆。

使用 DNS-01 获取通配符证书

要获取 *.yourdomain.com 的证书,必须使用 DNS-01。HTTP-01 无法验证通配符,因为通配符涵盖无限个主机名 — 不存在一台服务器能放置文件。

通配符 + 裸域名: 如果你同时需要 *.example.comexample.com,GetHTTPS 可能需要两次验证。某些情况下需要在 _acme-challenge.example.com 同时存在两条 TXT 记录 — 一条用于通配符,一条用于裸域名。两条记录都保留到验证通过为止。

通配符证书完整指南 →

DNS-01 与 HTTP-01 对比

DNS-01HTTP-01
操作内容在 DNS 中添加 TXT 记录在服务器上放置文件
所需权限域名 DNS 设置Web 服务器文件系统
端口要求80 端口必须开放
通配符支持✅ 通配符必须使用
无服务器时可用
速度1-15 分钟(DNS 传播)即时(文件可访问的前提下)
CDN 后是否可用✅ 始终可用⚠️ 可能需要绕过 CDN
最适合通配符、无服务器、CDN 场景大多数单域名证书

选择 DNS-01 的场景: 需要通配符、80 端口被封、服务器不在公网、或在 CDN 后面。

选择 HTTP-01 的场景: 有 Web 服务器、80 端口开放、不需要通配符。速度更快(无需等待传播)。

故障排除

GetHTTPS 找不到 TXT 记录

  • 多等一会 — 某些服务商需要 5-15 分钟。低 TTL 有帮助但不能完全消除传播时间。
  • 检查记录名称: 某些服务商会自动追加域名。如果你输入了 _acme-challenge.example.com 而服务商又追加了 .example.com,实际记录会变成 _acme-challenge.example.com.example.com(错误)。只输入 _acme-challenge,让服务商自动追加。
  • 手动验证:
    dig TXT _acme-challenge.yourdomain.com +short
    如果返回空,说明记录还未传播。

值错误 / 大小写不匹配

  • 值是区分大小写的。直接从 GetHTTPS 复制粘贴 — 不要手动重新输入。
  • 除非 DNS 服务商要求(如 Route 53),否则不要添加引号。

多条 TXT 记录冲突

  • 添加新记录前,删除之前尝试留下的旧 _acme-challenge TXT 记录。
  • 例外:通配符 + 裸域名验证可能需要同一名称下同时存在两条记录。

DNS 服务商不支持 TXT 记录

少见,但某些基础 DNS 服务缺少 TXT 支持。换用功能完整的 DNS 服务商(Cloudflare 免费版支持所有记录类型)。

何时使用 DNS-01

场景适合 DNS-01?
通配符证书(*.example.com✅ 必须使用
80 端口被封✅ 最佳选择
服务器在内网✅ 唯一选择
在 Cloudflare/CDN 代理后面✅ 避免代理问题
域名没有服务器(停放、重定向)✅ 唯一选择
有服务器的简单单域名证书⚠️ HTTP-01 更快

常见问题

能自动化 DNS-01 验证吗?

可以,通过命令行工具。acme.sh 内置了 150+ DNS 服务商的 API 集成 — 可以自动添加和删除 TXT 记录。Certbot 也支持主流服务商的 DNS 插件。GetHTTPS 需要手动修改 DNS(基于浏览器,不调用 API)。

把 DNS API 密钥给 ACME 客户端安全吗?

API 密钥对你的 DNS 区域有写权限,应当像对待服务器凭据一样重视。尽可能使用作用域受限的 API token(如 Cloudflare 的按区域 token)。为了最大安全性,使用 GetHTTPS 手动修改 DNS — 不涉及任何 API 密钥。

TXT 记录需要保留多久?

仅在验证期间需要 — 通常几分钟。证书签发后即可删除。续签时会创建新的记录和新的值。

DNS 服务商传播很慢怎么办?

将 TTL 设置为服务商允许的最低值(理想情况为 60 秒)。如果传播超过 15 分钟,检查记录名称/值是否有拼写错误,或换用其他 DNS 服务商。Cloudflare 的 TXT 记录传播通常在几秒内完成。

DNS-01 在 Cloudflare 代理(橙色云朵)下可用吗?

可以。DNS-01 验证通过 DNS 查询 TXT 记录,而非 HTTP — 因此 Cloudflare 代理状态(橙色或灰色云朵)无关紧要。这是相比 HTTP-01 的关键优势,后者可能被代理阻断。

相关文章

快速开始 2026-05-08
如何获取免费 SSL 证书(分步指南)
5 分钟从 Let's Encrypt 获取免费 SSL 证书 — 无需安装软件、无需注册账号。涵盖 4 种方法、两种验证方式、6 个平台的安装教程和故障排除。
快速开始 2026-05-08
HTTP-01 验证:工作原理与操作指南
HTTP-01 是证明域名所有权以获取 SSL 证书的最简单方式。在服务器上放置一个文件,Let's Encrypt 进行验证,即可签发证书。
快速开始 2026-05-07
如何免费获取通配符 SSL 证书
使用 GetHTTPS 从 Let's Encrypt 免费获取通配符 SSL 证书 (*.example.com)。仅需 DNS-01 验证。涵盖 Cloudflare、Route 53、GoDaddy 和 Namecheap DNS 设置。
在浏览器中获取免费 SSL 证书
无需安装,无需账号。私钥始终留在你的设备上。
获取证书