Caddy ECH完整指南:如何止住TLS握手中的域名泄露
【免费下载链接】caddyFast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS项目地址: https://gitcode.com/GitHub_Trending/ca/caddy
Caddy 的 ECH(Encrypted Client Hello,加密客户端问候)功能,让你访问网站时的真实域名不再以明文出现在TLS握手里,网络观察者只能看到一个共享的"外层名"。它和 Caddy 自动HTTPS配合,全局选项里写两行配置,服务器就会自行生成密钥、定期轮换,并把配置发布到DNS。🛡️
先看哪些域名在裸奔
传统TLS中,你访问的域名(SNI,即"连接时递出去的域名名片")是明文发送的。内容加密了,但观察者照样知道你去哪个站。启用 ECH 后,真正的握手信息被加密包在一个通用的外层名里,中间人看到的只剩这个大家共用的名字,而非你的真实站点。
最小配置怎么配
在Caddyfile顶部全局选项里加入以下内容(cloudflare为DNS提供商名,以你使用的构建为准):
{ ech shared.example.com { dns cloudflare { api_token {env.CF_TOKEN} } } }shared.example.com是外层公共名,Caddy 会自动为它申请证书,无需你操心。下方dns块指定用哪个DNS提供商发布配置,其余站点配置保持原样即可。
密钥与证书如何被自动打理
加载配置后,生成、轮换、发布全程不需要你手工操作,核心逻辑在modules/caddytls/ech.go。三个组件各司其职:
- ECHConfiguration:你只填一个 public_name,Caddy 自动生成X25519密钥对,存入
ech/configs/持久化存储。 - ECHPublication:声明"把配置发布到哪里",默认覆盖TLS模块登记的所有站点域名,写入HTTPS/SVCB DNS记录。
- ECHDNSPublisher:具体执行DNS写入,把Base64编码的ECH配置放进域名的HTTPS记录的
ech参数里。
密钥生命周期:首次启动生成并入库;后台任务每小时检查一次,密钥满30天即生成新的并标记旧键"已替换",满90天彻底删除。多实例集群通过同一存储锁同步,不会重复轮换。还有个隐式行为:外层名会被自动加入证书自动管理清单,客户端首连因此不会退回明文SNI。
不同规模怎么开
个人与博客
- 一两个域名直接共用一个公共名,匿名集够用。
- 需要含DNS提供商模块的自定义构建,官方发行包默认不带。
小型团队
- 所有子域共用一个外层名,保护的域名越多效果越好。
- CNAME域名会被跳过发布,这类域名建议改用A记录。
企业与多域名
- 可在 publication 里配置多个发行块,不同域名组分配不同外层名和DNS提供商。
- 使用On-Demand TLS时,动态域名需在发行块中显式列出,否则首连会明文泄露。
开之前核对的三件事
- 确认构建包含DNS提供商:没有提供商模块,ech 指令不会生效,这是最常见的"配了没反应"。
- 确认客户端走DoH/DoT:浏览器一般只从HTTPS DNS记录读ECH配置,普通DNS下配置本身也会泄露;可用日志里的 "successfully published ECH configuration list" 验证发布是否成功。
- 别建太多公共名:每多一个外层名就稀释一次匿名集,一台服务器默认一个即可;另外ECH要求TLS 1.3,Caddy会自动把最低协议版本顶上去。
ECH高频问答
会不会拖慢请求?几乎无感,握手多一层加解密但只在建连时发生一次,现代硬件开销可忽略。
为什么客户端没用上ECH?查两处:域名是否已有HTTPS DNS记录、客户端是否启用DoH/DoT。任一不满足时浏览器回退普通SNI连接,网站仍然可用。
需要手工换密钥吗?不用。30天自动轮换、90天自动删除,过渡期新旧密钥并存,还没拿到新配置的客户端也能正常连接。
反代或静态站能用吗?能。ECH作用在TLS层,与站点背后是反代、静态文件还是应用无关。
目前 Caddy 的 ECH 仍标注为实验特性,字段结构后续版本可能微调。随着DNS记录标准落地和浏览器支持趋于稳定,SNI保护正在变成HTTPS的标配环节。如果你有域名和DNS API权限,上面的配置今晚就能开起来。🚀
【免费下载链接】caddyFast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS项目地址: https://gitcode.com/GitHub_Trending/ca/caddy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考