ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Caddy ECH 深入实战:配置、自动轮换与避坑完全指南

2026/8/29 14:28:10 拓冰建站 浏览量
Caddy ECH 深入实战:配置、自动轮换与避坑完全指南 Caddy ECH 深入实战配置、自动轮换与避坑完全指南【免费下载链接】caddyFast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS项目地址: https://gitcode.com/GitHub_Trending/ca/caddySNITLS 握手中携带目标域名的字段会让你的真实站点名在每次连接时明文暴露。Caddy 的 ECHEncrypted Client Hello把客户端发出的 ClientHello 整体加密真实域名藏进外壳里。这套 Caddy ECH 配置实战到底怎么做拆成三层看握手路径、配置旋钮、密钥自动生命周期。握手里明文 SNI 泄露了什么哪怕你的站点已是完整 HTTPS握手中的 SNI、ALPN 依然肉眼可见路径上的观察者能精确判断你在访问哪个站。ECH 的思路是外层 ClientHello 发你配置的一个壳域名public name真实请求参数放进加密后的内层外部只能看到壳。代价有两点你需要一个额外域名当外壳客户端必须事先拿到 ECH 配置公钥加参数才能加密。后者是 ECH 能否生效的关键也决定了它必须发布下面按配置层、密钥层、发布层逐层拆解。打开 Caddy ECHech 全局选项怎么配Caddyfile 里 ECH 是全局选项由caddyconfig/httpcaddyfile/options.go中的parseOptECH解析最终落到 tls 应用的encrypted_client_hello字段。最小可用写法一个壳域名加一个 DNS 发布者如下{ ech shared.example.com { dns cloudflare token-$CLOUDFLARE_API_TOKEN } }shared.example.com是外层 SNICaddy 会为该域名自动申请证书只用于握手外壳不承载业务流量dns子指令指定 libdns 提供商用来把 ECH 配置写成 HTTPS 记录省略时默认使用全局dns选项密钥 30 天自动轮换是怎么跑的密钥生成在modules/caddytls/ech.go的generateAndStoreECHConfig用 X25519 密钥对生成后连同序列化的 ECHConfig 一起写入 Caddy 存储的ech/configs/id/路径下key.bin、config.bin、meta.json 三个文件。TLS 模块随后启动后台协程每小时检查一次轮换与发布轮换判据是两个常量const ( rotationInterval 24 * time.Hour * 30 // 30 天轮换 deleteAfter 24 * time.Hour * 90 // 90 天清理 )密钥满 30 天先生成新密钥旧的标记Replaced后继续可用兼容仍持旧配置的客户端被标记满 90 天后从存储与内存中删除整个流程由存储里的ech_rotation锁保护多实例集群不会竞态轮换版本号与 Go 版本约束藏在哪注意ech.go里版本号常量是draftTLSESNI250xfe0d说明当前实现跟随 ECH 草案版密钥最终以tls.EncryptedClientHelloKey形式交给 Go 标准库握手所以要求 stdlib 已带服务端 ECH 支持Go 1.24 起。升级环境时先确认这两点否则会出现配置看似生效但客户端握不上 ECH 的情况。客户端怎么拿到密钥DNS 自动发布ECH结构体的Publication字段注释写明不发布的话大多数浏览器根本不会用 ECH。实现方是ECHDNSPublisher把 base64 编码的 ECHConfig 写进域名的 HTTPS DNS 记录ech参数测试文件ech_dns_test.go验证了它合并时保留 alpn、ipv4hint 等既有参数。默认行为有两层不写 publication 块时Caddy 把所有配置经由应用级全局 dns 提供商发布而若你根本没配置 DNS 提供商发布逻辑直接空转此时只能靠日志发现 ECH 没真正生效。配置 ECH 容易踩的三个坑壳域名必须是你能控制的域名Caddy 要为它签发证书签不到时客户端会被迫明文暴露真实域名隐私反而更差别开太多 public name源码注释强烈建议 config 数量最少化以最大化匿名集同服务器多个子域各挂一个壳名是最常见的误配确认 DNS 提供商支持 HTTPS 记录发布依赖 libdns 的 HTTPS 记录接口后台发布失败只写进名为ech的 logger不阻塞启动源码中ECH与ECHPublication均标注 EXPERIMENTAL版本号跟随 draft-ietf-tls-esni 草案后续关注其 RFC 定稿与 Go stdlib 的服务端支持稳定性。【免费下载链接】caddyFast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS项目地址: https://gitcode.com/GitHub_Trending/ca/caddy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考