综合 Caddy 2.10 的 ECH 自动化:要编进 DNS 模块,升级后通配符证书还会改变签发行为

2026-10-19 21:03:36

Caddy 2.10 的 ECH 自动化:要编进 DNS 模块,升级后通配符证书还会改变签发行为

Caddy 2.10.0 于 2025-04-18 发布。这一版最受关注的是 Encrypted ClientHello(ECH)的自动化支持,同时它还悄然改掉了一个长期默认行为:有通配符时,子域不再单独签发证书。这两件事都不需要改业务代码,但都需要在部署时留意。

ECH 加密的是握手最后一段明文

TLS 握手前期已经加密得差不多,唯独 ClientHello 还带着明文 SNI 域名,中间人一眼就能看出你在访问谁。ECH 把这段也加密掉,规范草案目前接近定稿。

Caddy 2.10 能全自动完成 ECH:生成 ECH config、发布出去(后续版本会支持轮换)、再下发给客户端。你要做的只有两件事:指定一个 DNS provider,指定一个对外公开域名(outer / public name)。

前提:DNS provider 模块必须编进二进制

ECH config 必须通过标准化的 HTTPS 类型 DNS 记录发布,记录里带 ech 这个 SvcParamKey。Caddy 会为所有受保护域名写这条记录,但前提是二进制里编入了对应 provider 的模块,并且配置里给了凭据。标准发行版不带这些模块,得自己构建:

xcaddy build --with github.com/caddy-dns/cloudflare

对应的最小 Caddyfile:

{
debug
dns cloudflare {env.CLOUDFLARE_API_KEY}
ech ech.example.net
}

example.com {
respond "Hello there!"
}

这里的 dns 是 2.10 新增的全局选项(对应 tls app 配置里的 dns 参数),凭据写一次即可,不用在每个 site block 里重复。

outer name 的两条硬要求

ech.example.net 这个外层名会直接暴露在抓包里,所以:

  1. 它必须指向你的服务器。 客户端实际连的就是这个域名。
  2. Caddy 会为它签发证书。 拿不到证书,客户端要么被降级到不安全连接,要么连接直接失败。

还有一个限制:CNAME 出去的域名不会自动发布 ECH 记录。 域名必须在当前 zone 里已经存在记录,Caddy 才写得进去。

怎么确认 ECH 真的生效

  • 客户端得支持 ECH:部分自定义编译的 curl、Firefox、较新的 Chromium。
  • 必须开 DoH/DoT。 走明文 DNS 的话,真实域名在解析阶段就漏了,ECH 等于白配。
  • 清 DNS 缓存,Firefox 在 about:networking#dns 里清。
  • 抓包看 ClientHello:SNI 里应该只剩外层名,真实域名不再出现。也可以用 dig HTTPS example.com 检查那条 HTTPS 记录是否已发布。

顺带的其他变化

  • 后量子密钥交换:默认支持 x25519mlkem768 组。
  • ACME profiles:实验性支持,可用于 Let's Encrypt 的 6 天短周期证书。
  • Via 头:反向代理改用 Via 标识自己,不再往响应里重复塞 Server 头。

通配符证书从「可选」变成「默认」

这是升级后最容易踩到的一条。以前 Caddy 对配置里字面写出的每个域名单独签发证书;2.10 起,如果存在通配符,子域会直接复用通配符证书,不再单独签发。动机还是 ECH:给每个子域单独签证书,等于在证书透明度日志里把子域列表公开了。此前实验性的 auto_https prefer_wildcard 选项已被移除,因为现在它就是默认值。

想恢复旧行为,在站点上打开 tls force_automate:

*.example.com {
tls {
force_automate
}
respond "Hello there!"
}

社区讨论里也确认了这一点:配置了通配符站点时,Caddy 会签一张通配符证书并用在所有被覆盖的站点上,除非显式关掉。

升级时可能阻塞流程的两件事

libdns 1.0 beta 带来 API 变更,所有 DNS provider 包都需要跟进更新。cloudflare、rfc2136、desec 已经改好。用 xcaddy 构建时如果某个插件没跟上,编译阶段就会失败。

Go 版本策略收紧:从这一版起只支持最新的一个 Go minor 版本,之前是最近两个。构建流水线里固定 Go 版本的话记得同步升级。

  • Release notes:
  • Automatic HTTPS 文档:
复制全文 生成海报 Caddy TLS 运维 反向代理

推荐文章

程序员茄子在线接单