尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Caddy ECH 完整指南:3 步开启加密客户端 Hello,让 SNI 不再明文泄露

Caddy ECH 完整指南:3 步开启加密客户端 Hello,让 SNI 不再明文泄露 Caddy ECH 完整指南3 步开启加密客户端 Hello让 SNI 不再明文泄露【免费下载链接】caddyFast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS项目地址: https://gitcode.com/GitHub_Trending/ca/caddy连公共 WiFi 时即使流量已走 HTTPS握手时的 SNI 字段仍是明文——旁边的人能直接看到你要打开哪个网站。Caddy 内置了 ECHEncrypted Client Hello加密客户端 Hello支持能把这个域名也一并锁进加密层。这篇讲清 ECH 解决什么问题、原理怎么跑以及 3 步开启它。开启 ECH 后的区别域名从明牌变暗牌没有 ECH内容加密但你在访问哪个域名全程明牌。你的 ISP、公司出口、咖啡馆 WiFi 的运维都能记下你的浏览轨迹。有 ECH客户端发出的 SNI 换成一个被多个站点共用的外部域名类比信封上只写某公寓的公共信箱号真实收件人写在封了蜡的内层。旁观者只能知道用户连了这台服务器无法判断具体是站内哪个站点。注意它的价值定位不是让连接更安全内容本来就加密了而是补上域名可见这个缺口。Caddy ECH 原理3 个关键点一封信封两层。TLS 握手的 ClientHello 里带着 SNI。ECH 把真实 ClientHello 加密后外面再包一层用public_name的外层 ClientHello。谁看到外层 SNI谁就只知道公共域名。密钥全自动管理。Caddy 自动生成 X25519 密钥对HPKE 加密套件持久化在自己的存储里ech/configs/前缀下每 30 天轮换一次新密钥90 天后删除旧密钥集群实例间用存储锁同步。你不需要自己管任何密钥。浏览器要先知道路。客户端得提前知道某站点支持 ECH、该用哪个外部域名。主流浏览器是从 DNS 的 HTTPS 记录SVCB RR里读这份配置——Caddy 可以自动帮你把 ECH 配置发布成这条 DNS 记录即配置里的publication。核心实现都在 modules/caddytls/ech.go想深挖可以顺着读。Caddy ECH 最快配置方法3 步跑通ECH 配置挂在 tls 应用下。最小可用 JSON 如下只做两件事声明外部域名、提供 DNS API 让 Caddy 写记录{ apps: { tls: { encrypted_client_hello: { configs: [ { public_name: ech.example.com } ], publication: [ { publishers: { dns: { provider: { name: cloudflare, email: youexample.com, api_token: 你的 token } } } } ] } } } }第 1 步准备外部域名。public_name是对外展示的外层 SNI用你自己控制、且解析到这台服务器的域名。Caddy 会自动为它申请证书它只做外壳不承载真实流量。第 2 步配好发布渠道。DNS 发布依赖自定义构建需包含 DNS provider 模块如果你在 tls 应用里已经给 ACME 配了 DNS providerCaddy 会默认复用它发布 ECHpublication甚至可以省略。第 3 步看日志验证。启动后日志出现successfully published ECH configuration list即发布成功。浏览器端建议开 DoH 或 DoT 再测效果才完整。ECH 常见 6 个坑及处理ECH 强制 TLS 1.3。受影响的服务策略会被 Caddy 自动把最低 TLS 版本提到 1.3配置里写了更低版本也不会生效别当 bug。不配 publication 等于白开。绝大多数浏览器读不到配置就不会走 ECH。发布是必选项不是可选项。外部域名越少越好。源码注释明确建议每台服务器只保留一个 public name——站点共用一个外部域名匿名集越大旁观者越难区分。CNAME 域名发不了。域名若存在 CNAME 记录Caddy 跳过并打警告HTTPS 记录无法与 CNAME 共存完全没有任何 DNS 记录的域名也会被跳过这是为了保护通配符解析不被破坏。On-Demand TLS 的域名要手动列。按需签发证书的域名Caddy 在握手时才知道来不及发布——必须在publication[].domains里显式列出否则首个连接仍会明文暴露域名。它仍是实验特性。源码标注了 EXPERIMENTAL字段结构可能变化且依赖较新的 Go 版本go.mod 要求 1.25.1请用较新的构建。谁适合现在就用个人开发者有域名、DNS 支持 API 写入上面这份配置就能跑成本接近零隐私收益真实可测。小团队 / 多子域名产品最划算的场景——一个外部域名罩住整组子域名。求稳的生产环境建议先给非关键子域名开观察几天再铺开。API 还在演进CNAME、按需 TLS 等边界情况值得先验证。回到开头的公共 WiFi开启 ECH 后旁观者看到的只是那个共享外部域名具体站点不再明牌。现在就可以做的第一步给一个子域名填上public_name和publication等日志里那条 successfully published 出现再考虑扩大范围。【免费下载链接】caddyFast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS项目地址: https://gitcode.com/GitHub_Trending/ca/caddy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表