news 2026/8/29 11:11:31

Caddy 3 步快速开启 ECH,把真实域名藏进 TLS 握手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Caddy 3 步快速开启 ECH,把真实域名藏进 TLS 握手

Caddy 3 步快速开启 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,加密客户端问候)就是用来藏住这条信息的:Caddy 自 v2.6 起在 TLS 模块里内置了它,默认替访客守住访问足迹。

什么场景下你的域名是裸露的

HTTPS 虽然加密了内容,但连接开头有一句话是明文的:浏览器先告诉服务器“我要访问哪个域名”,这句话叫 SNI(Server Name Indication,服务器名称指示)。线路上的运营商、公司网关、公共 Wi-Fi 经营者都能顺手记下它,攒够一段时间,就能拼出一份相当准确的“某人在哪些日子访问过哪些站”的清单。

🔍 打个比方:就像住店客人在前台当着大堂所有人的面报房间号。ECH 改成了客人只说一句“我有预订码”,真正的房间号只有客人和前台两个角色看得到。

下面这几类人,通常很在意这句话:

  • 重视访问隐私的普通用户;
  • 站点属性敏感(媒体、医疗、内部系统入口)的运营者;
  • 不想让服务拓扑被外部流量分析探测出来的人。

Caddy ECH 到底做了什么

机制三句话能说完:

  1. 服务器端先生成一对 X25519 密钥(一种用来协商共享密钥的算法),并指定一个“外层域名”(public_name,掩护用的域名)。
  2. 浏览器把真实的 ClientHello(建连时的第一封握手报文)加密进外壳,外壳上只写外层域名,线路上就只剩外层域名可见。
  3. 客户端的“预订码”从域名的 HTTPS 记录里获取(一种按 RFC 9460 定义的新 DNS 记录类型),Caddy 可以直接自动发布这条记录。

服务端的事 Caddy 也替你做完了:自动生成密钥、每 30 天轮换一次、90 天后清理旧密钥,并会自动把站点最低版本抬到 TLS 1.3(这是 ECH 的门槛)。这些逻辑都集中在 modules/caddytls/ech.go 里,可以对照着看。

Caddy ECH 开启步骤

第一步:兼容性检查

  • Caddy 版本 v2.6 以上;
  • 域名的 DNS 服务商支持写入 HTTPS 记录,最好让访客侧开了 DoH/DoT(加密的 DNS 查询),否则预订码可能拿不到;
  • 想让 Caddy 自动发布记录,需要用xcaddy build构建带对应 DNS 服务商插件的版本(例如xcaddy build --with github.com/caddyserver/caddy-dns/cloudflare);不想构建的话,也可以自己手动把 HTTPS 记录写好;
  • 浏览器侧,Chrome 112、Firefox 113、Edge 112 及更新版本都支持。

第二步:写最小配置 ⚙️

在 Caddyfile 的全局块里加一段ech选项,参数就是外层域名:

{ ech public.example.com { dns cloudflare { token {env.CF_TOKEN} } } }

外层域名必须能解析到你这台服务器,Caddy 会为它申请一张证书(只用于握手,不承载业务流量)。这段选项的解析逻辑在 caddyconfig/httpcaddyfile/options.go。

第三步:验证发布与握手 ✅

先用dig +short HTTPS 你的域名确认记录里出现了ech参数,再打开浏览器的chrome://net-internals/#ech页面,看握手是否走了加密路径。两处都通过,就算上线了。

ECH 排查清单

🧯 按“现象 → 处理”来对:

  • HTTPS 记录没出现→ 查 Caddy 日志里 “failed to publish ECH configuration” 相关报错。常见原因是构建里没带 DNS 服务商插件、API 密钥无效;另外域名如果挂着 CNAME 记录,Caddy 会主动跳过不发布。
  • 记录有了,浏览器却不用 ECH→ 多半是访客侧 DNS 未加密(没走 DoH/DoT),配置可能被篡改或没取到;也可能是浏览器版本低于支持线。
  • 外层域名申请证书失败→ public_name 没解析到本服务器,这个必须修。否则客户端可能退回明文 SNI,隐私反而丢了。
  • 部分连接仍是明文→ 属正常现象。不支持 ECH 的客户端照走原来的 TLS 通道,可用性不受影响。

值不值得上

适合:在意访问隐私的用户、敏感属性站点的运营者、想躲开流量分析的企业入口。 不适合:纯内网或 IP 直连、没有可写 API 的 DNS 服务商、对 SNI 暴露毫不在意的场景。 代价:源码里仍标着 EXPERIMENTAL,配置结构可能调整;外层域名要多养一张证书;访客侧 DNS 未加密时拿不到任何收益。 性能上开销很小,握手延迟增加在毫秒量级,基本不构成取舍理由。

回到大堂

再回到开头那家酒店:ECH 生效后,前台记录的名单上只剩“预订码”这一种通用说法,客人实际进了哪间房,只有客人和前台知道。你的站点域名不再是当着大堂所有人喊出来的话,而是只有双方共享的一个编号。如果你在用 Caddy、又能管理域名的 DNS,这三步现在就可以走完。

【免费下载链接】caddyFast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS项目地址: https://gitcode.com/GitHub_Trending/ca/caddy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 11:09:48

OpenViking接入Claude Code:让编码Agent拥有持久记忆的完整教程

OpenViking接入Claude Code:让编码Agent拥有持久记忆的完整教程 【免费下载链接】OpenViking Self-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills. 项目地址: https://gitcode.com/GitHub_Trending/op/OpenViking …

作者头像 李华
网站建设 2026/8/29 11:08:53

Pandas核心概念与实战:从Series/DataFrame到数据清洗与性能优化

1. 为什么我们还在聊Pandas?如果你在数据科学或者数据分析的圈子里待过一阵子,可能会觉得“Pandas”这个话题已经被聊烂了。随便一搜,从“十分钟入门”到“高级技巧”,教程铺天盖地。那我为什么还要写这个“回顾与分享”系列&…

作者头像 李华
网站建设 2026/8/29 11:07:53

感知先于监督:基于反事实盲点的自包含视觉蒸馏方法

做模型压缩和知识蒸馏时,很多同学都会遇到一个相似的问题:知识蒸馏的流程看起来非常简单,加载一个训练好的大模型当教师,用它的 soft label 训练一个小模型当学生,整个流程就能跑通。但真正把蒸馏用在自己的业务数据上…

作者头像 李华
网站建设 2026/8/29 11:06:42

1.5kW数字可编程AC-DC电源,紧凑设计如何重塑系统供电方案

我最近看到 XP Power 发布了一款 1.5kW 数字可编程 AC-DC 电源的消息,标题很短,但信息密度相当高。这个功率档位非常有意思:比 500W 到 800W 的板载模块高出一截,又不到 3kW 以上需要三相输入的级别,正好卡在系统工程师…

作者头像 李华
网站建设 2026/8/29 11:05:59

慢速英语故事怎么精听?从裸听到跟读的完整听力训练法

这类标题看起来像童话故事,实际上是非常典型的慢速英语学习素材。慢速英语故事视频最值钱的不是情节,而是它把日常对话拉到你能听清的速度,让"认识但听不懂"的问题有地方可以解决。如果你看英语文本基本能懂,但裸听同样…

作者头像 李华