Contents

ACME的三种验签

CA/Browser Forum 行业标准

所有合规的 CA(如Let’s Encrypt等)都必须遵守一套全球通用的规则,叫做 Baseline Requirements。在这套规则里,明确规定了CA必须通过下面的几类方式之一来验证域名的控制权:

  • 文件验证(HTTP Based):在约定的路径放个东西
  • DNS验证(DNS Based):在DNS记录里加个东西
  • 邮件验证(Email Based):给管理员邮箱发送验证码。这是传统方式,由于邮件难以自动化,所以ACME不支持。

ACME协议标准

这里简单提一下,ACME是协议标准,acme.sh是实现这个协议的客户端工具,二者不同。

文件验证,也就是在网站放文件的思路虽然是通用的,但是没有ACME协议之前,每个CA厂商对文件名、文件内容、文件路径等的要求都不一样。

ACME协议的作用就是把这些验证动作标准化。它定义了 HTTP-01DNS-01TLS-ALPN-01 这三种具体的“挑战”流程,只要是支持ACME协议的CA,它们对文件路径、文件内容、文件格式、DNS记录名的要求都是完全一致的。

HTTP-01

这是最常用、最基础的验证方式,适用于拥有独立的服务器和Web服务的场景,acme.sh 的默认验证方式就是 HTTP-01。

交互逻辑

  • 下单:acme.sh 告诉 CA:“我要为 aetherial.cn 申领证书”。
  • 出题:CA 给出一个随机 Token(令牌),并告知 acme.sh 预期的内容。
  • 答题:acme.sh 在网站根目录创建路径 /.well-known/acme-challenge/<TOKEN>,并将 CA 要求的内容写入该文件。
  • 改卷:CA 通过 HTTP 协议访问 http://aetherial.cn/.well-known/acme-challenge/<TOKEN>。如果能获取到正确内容,验证通过。

技术细节

  • CA 初始请求必须走 80 端口。虽然 CA 支持重定向(HTTP -> HTTPS),但首跳必须是 80。
  • 验证具有临时性,验证完成后文件就可以删除

优缺点

  • 优点:配置简单,无需域名 API 权限,不依赖 DNS 传播。
  • 缺点:不支持通配符证书;必须暴露 80 端口;对于负载均衡(多节点)环境,需要保证所有节点都能访问到该文件。

DNS-01

这是唯一支持通配符证书的方式,也是最灵活的方式。

交互逻辑

  • 下单:acme.sh 申请 *.aetherial.cn(通配符)。
  • 出题:CA 要求在域名下添加一条 TXT 类型的解析记录。
  • 答题:acme.sh 在 DNS 解析中添加主机记录 _acme-challenge.aetherial.cn,值为 CA 给出的随机字符串。
  • 改卷:CA 查询全球 DNS 缓存,一旦查到对应的 TXT 记录值正确,验证通过。

技术细节

  • 需要域名 API 权限(如 阿里云、Cloudflare 等)来完成自动化的流程。
  • 通配符证书支持:*.aetherial.cn 可以覆盖所有子域名。
  • DNS 传播时间:通常需要几分钟到几小时,取决于 DNS 缓存刷新。

优缺点

  • 优点:支持通配符证书;无需暴露 Web 服务;无需公网IP,无需开放80端口。
  • 缺点:需要域名 API 权限;DNS 传播时间较长。

TLS-ALPN-01

这是一种较新的方式,它在 TLS 协议层完成验证,不需要任何 HTTP 资源或 DNS 修改。一般的使用场景是 443 端口已经有服务运行,但是不想中断它,可以使用这种方式启动一个临时的TLS服务来完成验证。

交互逻辑

  • 下单:客户端向 CA 申请证书。
  • 出题:CA 同样给出一个 Token。
  • 答题:客户端在 443 端口上临时构造一个特殊的自签名证书,该证书的 Subject Alternative Name 包含该 Token。
  • 改卷:CA 通过 TLS 握手连接客户端的 443 端口,并在握手过程中使用 ALPN(应用层协议协商)指定协议为 acme-tls/1。如果 CA 接收到包含正确 Token 的证书,验证通过。

技术细节

  • 非 HTTP 流,它不占用 HTTP 路径,而是利用了 TLS 握手阶段的特性。
  • 原生 Nginx 或 Apache 很难支持,因为它们不具备动态更改 TLS 握手内容的能力。通常由 Caddy 等集成化 Web Server 或专门的监听程序(如 acme.sh 的 standalone 模式)实现。

优缺点

  • 优点:只需开启 443 端口(适合 80 端口被封锁的环境);对文件系统无侵入。
  • 缺点:不支持通配符;实现门槛高,需要 Web 服务器软件的深度支持;必须有公网 IP。

总结对比

特性HTTP-01DNS-01TLS-ALPN-01
验证端口80 (HTTP)无需端口443 (HTTPS)
通配符支持❌ 不支持唯一支持❌ 不支持
内网支持❌ 需公网访问完美支持❌ 需公网访问
核心依赖Web Server / 文件系统DNS API 权限TLS 握手层支持
适用工具acme.sh / Certbot各云厂商 APICaddy / Standalone