第一次申请 SSL 证书的人几乎都会卡在这一步——选验证方式。界面上摆着 HTTP-01、DNS-01,有时还有个 DNS 委派,三个选项,点哪个?
先说"验证"是在验什么
申请 SSL 证书,本质上是在跟一个叫 CA(证书颁发机构) 的机构说:"这个域名是我的,给我发张证书。"
但 CA 不认识你,它需要你证明你确实控制这个域名。验证方式说白了就是:CA 出一道"作业题",你去完成它,CA 看到你完成了,就相信你是这个域名的主人。
HTTP-01 和 DNS-01 是两种不同的"出题方式",DNS 委派则是一种"做题辅助方案"。下面一个一个说。
HTTP-01:在网站上放一个文件
原理
CA 说:"你在 http://你的域名/.well-known/acme-challenge/ 这个路径下放一个特定内容的文件,我去访问,访问到了就算验证通过。"
你按要求放好文件,CA 去 HTTP 请求这个 URL,拿到正确内容,验证完成,证书签发。
优点
- 操作直观,只要能控制网站根目录,放个文件就行
- 不需要动 DNS,对 DNS 权限没有要求
限制
- 你的服务器必须公网可访问
- 只能验证单个域名,不能用于通配符证书(即
*.example.com) - 国内申请时可能受网络影响,因为CA大都是境外的,特别是政务云等特殊网络环境下,HTTP 请求可能不稳定,导致验证失败
适合谁
部署在公网服务器上的网站,不需要通配符证书,没有 DNS 管理权限的。
DNS-01:在 DNS 里加一条记录
原理
CA 说:"你在你的域名下加一条 TXT 记录,内容是我给你的这串随机值,我去查 DNS,查到了就算验证通过。"
你去域名的 DNS 管理后台(比如阿里云、Cloudflare、腾讯云),手动加一条:
_acme-challenge.你的域名. TXT "CA给你的那串随机值"
CA 查到这条记录,验证通过。
优点
- 服务器不需要公网访问,内网服务器也能用
- 支持通配符证书,这是 HTTP-01 做不到的
- 添加 DNS 解析即可,一般对网络环境和技术要求更低,验证更稳定
限制
- 需要有 DNS 管理权限
适合谁
需要通配符证书的、服务器在内网的、或者不想开 80 端口的场景。
对比一下
| HTTP-01 | DNS-01 | |
|---|---|---|
| 操作位置 | 在服务器上放文件 | 在 DNS 后台加解析记录 |
| 服务器需要公网 | 必须 | 不需要 |
| 支持通配符证书 | ❌ | ✅ |
| 受网络环境影响 | 较大,特别是国内访问境外 CA 时 | 较小,DNS 解析相对稳定 |
| 技术难度 | 较高,需要配置服务器、开放端口、处理跳转等 | 较低,只需修改 DNS 记录 |
DNS 委派:DNS-01 的进阶用法
说完了两种验证方式,再来说 DNS 委派——这不是第三种验证方式,它是基于 DNS-01 的一个优化方案。
DNS-01 验证本身不复杂,但如果你想让证书自动续期,就必须让工具能在每次续期时自动写入新的 TXT 记录——也就是说,工具需要能调用你 DNS 服务商的 API。
这里有两个现实问题
-
不是所有 DNS 服务商都支持 API。很多域名托管在一些小众或者老牌的服务商,根本没有 API 可以调用,只能手动登录后台改记录——证书 90 天一到期,就得手动操作一次,繁琐且容易忘。
-
就算有 API,主域的权限也太重。你的主域名 DNS 管着整个网站的解析,把 API Key 交给证书工具,意味着这个工具理论上可以改动你所有的 DNS 记录——权限太大,一旦 Key 泄漏或者工具出问题,整个域名的解析都可能被波及。
DNS 委派就是为了同时解决这两个问题而出现的。
DNS 委派怎么解决这个问题
你新建一个专门用来做 ACME 验证的子域,比如:
_acme-challenge.example.com
然后在主域的 DNS 里加一条 CNAME,让这个地址指向另一个专用的 DNS Zone,比如放在一个独立的、权限受控的 DNS 服务上:
_acme-challenge.example.com. CNAME _acme-challenge.example.com.acme-dns.io
之后,所有的 ACME TXT 记录都去那个专用 Zone 里写。CA 查询时,会跟着 CNAME 走,最终找到正确的 TXT 记录,验证通过。
好处是什么
- 主域的 DNS 只需要加一次 CNAME,以后都不用动——无论证书续期多少次
- 证书工具拿到的只是那个专用小 Zone 的 API Key,权限极小,就算泄漏了,影响范围也仅限于这个验证用的子域
- 主域 DNS 用什么服务商都行,哪怕完全不支持 API 也没关系——验证这边单独用一个支持 API 的服务来处理
一个典型的使用场景 就是 CertFlow,它就支持 DNS 委派,配置一次就可以实现证书的自动续订。
适合谁
- 想实现证书自动续期,但主域 DNS 服务商不提供 API 的
- 有 API 但不想把主域的完整 DNS 权限暴露给证书工具的
- 需要统一管理多个域名续期的
选哪个?
这三者并不是互斥的,根据你当前的现实情况:
- 要通配符证书 → 必须 DNS-01 或 DNS 委派
- 有 DNS 管理权限 → 优先 DNS-01 更简单更稳定
- 没有 DNS 管理权限 → 只能 HTTP-01,但要注意网络环境和服务器配置可能带来的验证问题
理解了背后的原理,选起来就不纠结了。
如果你还想了解更多关于 SSL 证书的选购和部署建议,可以看看我们之前写的免费 vs 付费 SSL 证书那篇文章,里面有更详细的对比分析和实操建议。
如果你想申请免费的证书,还想要自动续期、自动部署、临期告警等功能,CertFlow 可以帮你搞定一切证书管理的烦恼,快去试试吧!