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

资讯详情

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

Caddy ECH 配置教程:两步隐藏 TLS 握手里的真实域名

Caddy ECH 配置教程:两步隐藏 TLS 握手里的真实域名 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 站点开启 ECHEncrypted Client Hello加密客户端问候让握手阶段暴露的服务器名称变成你指定的公共名称。你的访问域名正在明文传输把任意一次 HTTPS 连接抓包看最扎眼的一帧就是 ClientHelloTLS 握手的第一条客户端消息。它里面夹着一个 SNIServer Name Indication服务器名称指示字段值就是用户正在访问的域名——明文任何中间节点都能读。你的网站内容加密得好好的域名本身却像没贴封条的包裹标签谁都能看。运营商、公共 Wi-Fi 节点、公司网关全都顺理成章地知道这台设备正在访问 example.com。Caddy 在 TLS 应用里内置了 ECH 支持实现位于 modules/caddytls/ech.go能自动帮你生成密钥、轮转密钥并把配置发布到 DNS。注意该模块在代码里标注为 EXPERIMENTAL实验性接口可能随版本调整。原理拆解一次共享快递柜式的握手打个比方你把包裹寄到共享快递柜面单只写中心快递柜这个地址公共名称自己取件的格口号通过加密短信单独发给你。邻居只能看到有人频繁往同一个快递柜寄包裹猜不出里面是谁寄给谁的。具体到 Caddy 的工作机制生成密钥对首次启动时Caddy 用 DHKEM(X25519, HKDF-SHA256) 算法自动生成一对 HPKE 密钥HPKE 是基于混合公钥的封装加密负责把对称密钥安全地交给对方连同公共名称一起打包成 ECHConfig 存进本地存储。发布到 DNS配置了 DNS 提供商后Caddy 把你保护域名的 HTTPS 记录RFC 9460 定义的 DNS 记录类型写入该域名ECHConfig 以 base64 形式放在ech参数里。客户端封装请求支持 ECH 的浏览器在解析域名时读到这条记录把真实 ClientHello含真实 SNI加密后套一层使用公共名称的外层 ClientHello 发出去。服务端拆包外层用公共名称完成证书验证Caddy 再用私钥解开内层按真实域名路由到对应站点。整个机制要求 TLS 1.3 及以上Caddy 会对启用 ECH 的连接策略自动抬高最低版本。兼容性检查清单动手前先确认四件事 Caddy 版本包含 ECH 模块当前仓库实现见 modules/caddytls/ech.go且你的 Caddyfile 解析走的是 caddyconfig/httpcaddyfile/options.go 中的ech全局选项 你的域名支持写入 HTTPS 记录且 DNS 服务商提供可写入的 APICaddy 需要带 DNS 提供商模块的自定义构建 公共名称public_name的解析已指向这台服务器Caddy 要给它签发证书 客户端侧浏览器较新版本 启用了 DoHDNS over HTTPS或 DoT否则 DNS 里的 ECH 配置读不到最小可运行配置Caddyfile 里只加一个ech全局选项行内写公共名称块内用dns子指令指定发布用的 DNS 提供商。{ ech ech.example.com { dns cloudflare { api_token $CLOUDFLARE_TOKEN } } } https://shop.example.com { respond hi 200 }保存后跑caddy reload --config Caddyfile。Caddy 会自动为ech.example.com申请证书代码里已把公共名称加入自动化策略见 caddyconfig/httpcaddyfile/tlsapp.go并为shop.example.com写入 HTTPS 记录。ECH 验证三步dig short HTTPS shop.example.com curl --ech https://shop.example.com -I第一条应返回带ech参数的记录没有就先检查 DNS 提供商配置第二条用 curl 以 ECH 模式握手能正常返回响应头即服务端链路通第三步Chrome 里打开chrome://net-internals/#ech确认该域名出现在已加载的 ECH 配置列表中抓包时 SNI 应显示为公共名称避坑指南三个高频故障现象日志出现 domain has CNAME record站点始终走明文 SNI。原因HTTPS 记录不能与 CNAME 共存Caddy 检测到 CNAME 会直接跳过发布。解法把该域名的 CNAME 换成 A/AAAA 记录后重新加载配置。现象域名下没有任何 DNS 记录只靠通配符 A 记录兜底发布日志提示 does not have any existing records。原因给一个没有任何记录的域名写 HTTPS 记录会让通配符解析对它失效Caddy 为避免打断解析主动跳过。解法先给域名加一条真实的 A/AAAA 记录再让 Caddy 发布。现象客户端偶尔退回明文 SNI 握手。原因公共名称证书没签下来域名没解析到本服务器客户端拿不到可用的 ECH 配置只能裸连。解法确认ech.example.com的解析指向本机且证书状态正常另外用了 On-Demand TLS按需签证书的域名要在publication.domains里显式列出否则首次连接仍会暴露真实域名。一页收束开启 ECH 前后的差别对比项普通 TLS开启 Caddy ECH中间节点看到的 SNI真实域名公共名称握手最低版本取决于配置强制 TLS 1.3密钥管理无自动生成约 30 天轮转、90 天后清理配置分发无自动写入 DNS HTTPS 记录现在就去改你的 Caddyfile加一段ech选项reload然后跑上面两条验证命令看 SNI 是否已变成公共名称。【免费下载链接】caddyFast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS项目地址: https://gitcode.com/GitHub_Trending/ca/caddy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表