ECH,新时代的域前置
字数 1294 2025-08-22 12:22:54

ECH技术详解:新时代的域前置技术

背景概述

传统修改HOST方式的域前置技术已被各大CDN厂商修复,CloudFlare推动并率先支持的ECH(Encrypted Client Hello)技术成为新的解决方案。ECH是TLS 1.3协议的扩展,旨在增强隐私保护,防护中间人攻击和流量分析。

ECH核心原理

传统TLS 1.3握手的问题

  • 客户端支持的加密套件明文传输
  • SNI(Server Name Indication)明文暴露
  • 其他协议扩展字段未加密

ECH技术改进

  • 加密整个ClientHello包
  • 真正的ClientHello(ClientHelloInner)使用公钥加密
  • 加密内容放入握手包的extension部分
  • 流量设备只能看到虚假的ClientHelloOuter(包含虚假SNI)

ECH技术实现细节

公钥获取机制

  • 公钥存储在DNS域名的HTTPS解析记录中
  • 可通过dig命令查询:
    dig +short research.cloudflare.com TYPE65
    

ECH DNS记录解析

支持ECH的域名会返回包含以下信息的记录:

alpn = "h2"
ipv4hint = 104.18.4.139,104.18.5.139
ech = AEX+DQBBmgAgACCNFwS4pgiG2q4rxde+tqxJ4wUIeoHX1aAAv4oYxDjlZwAEAAEAAQASY2xvdWRmbGFyZS1lY2guY29tAAA=
ipv6hint = 2606:4700::6812:48b,2606:4700::6812:58b

ECH记录内容解析

ech字段包含以下关键信息:

  • public_name: cloudflare-ech.com (公钥名称)
  • pk: 8d1704b8a60886daae2bc5d7beb6ac49e305087a81d7d5a000bf8a18c438e567 (公钥)
  • kemid: 32 (密钥交换算法ID)
  • extensions: [] (协议扩展)
  • version: 65037 (配置版本)
  • cipher_suite: [{1 1}] (对称加密套件)

技术实现工具

ECH解析工具

GitHub项目:hellais/ech

当前CloudFlare ECH特点

  • 所有CloudFlare ECH服务端共用一个公钥
  • 可向任意开启ECH服务的CloudFlare域名发送DNS HTTPS类型请求获取TLS握手公钥
  • 建议使用DoH(DNS over HTTPS)服务加密整个DNS查询过程

客户端实现

Golang官方支持

2024年5月Golang官方添加了ECH客户端支持:commit 578575

示例实现

GitHub项目:0xCaner/DoH2ECH_demo

编译方法

# Linux 64-bit
GOOS=linux GOARCH=amd64 go build -o DoH2ECH-demo-linux-amd64

# Windows 64-bit
GOOS=windows GOARCH=amd64 go build -o DoH2ECH-demo-windows-amd64.exe

# macOS 64-bit
GOOS=darwin GOARCH=amd64 go build -o DoH2ECH-demo-darwin-amd64

使用方式

Usage of DoH2ECH-demo-windows-amd64.exe:
  -h    显示帮助信息
  -host string
        请输入你要访问的HOST (示例: www.discord.com) (default "www.discord.com")
  -path string
        请输入你要访问的PATH (示例: /) (default "/")

示例命令:

.\DoH2ECH-demo-windows-amd64.exe -host="www.discord.com" -path="/"

连接测试特点

  1. DNS查询:仅向dns.alidns.com发送请求(可替换为任意DoH服务)
  2. SNI可见性:只能看到cloudflare-ech.com
  3. 真实请求:inner-client-hello包使用公钥加密在Extension中,流量设备无法发现真实目标网站

验证ECH支持

可通过以下链接验证浏览器是否支持ECH:

  • https://tls-ech.dev/
  • https://cloudflare-ech.com/cdn-cgi/trace

技术优势

  1. 增强隐私保护
  2. 防止SNI嗅探
  3. 绕过网络审查(测试可绕过GFW)
  4. 完整加密握手过程

注意事项

  1. 目前主要依赖CloudFlare实现
  2. DNS查询建议使用DoH加密
  3. 公钥可能定期更新
  4. 需要客户端和服务器端同时支持
ECH技术详解:新时代的域前置技术 背景概述 传统修改HOST方式的域前置技术已被各大CDN厂商修复,CloudFlare推动并率先支持的ECH(Encrypted Client Hello)技术成为新的解决方案。ECH是TLS 1.3协议的扩展,旨在增强隐私保护,防护中间人攻击和流量分析。 ECH核心原理 传统TLS 1.3握手的问题 客户端支持的加密套件明文传输 SNI(Server Name Indication)明文暴露 其他协议扩展字段未加密 ECH技术改进 加密整个ClientHello包 真正的ClientHello(ClientHelloInner)使用公钥加密 加密内容放入握手包的extension部分 流量设备只能看到虚假的ClientHelloOuter(包含虚假SNI) ECH技术实现细节 公钥获取机制 公钥存储在DNS域名的HTTPS解析记录中 可通过dig命令查询: ECH DNS记录解析 支持ECH的域名会返回包含以下信息的记录: ECH记录内容解析 ech字段包含以下关键信息: public_name : cloudflare-ech.com (公钥名称) pk : 8d1704b8a60886daae2bc5d7beb6ac49e305087a81d7d5a000bf8a18c438e567 (公钥) kemid : 32 (密钥交换算法ID) extensions : [ ] (协议扩展) version : 65037 (配置版本) cipher_suite : [ {1 1} ] (对称加密套件) 技术实现工具 ECH解析工具 GitHub项目: hellais/ech 当前CloudFlare ECH特点 所有CloudFlare ECH服务端共用一个公钥 可向任意开启ECH服务的CloudFlare域名发送DNS HTTPS类型请求获取TLS握手公钥 建议使用DoH(DNS over HTTPS)服务加密整个DNS查询过程 客户端实现 Golang官方支持 2024年5月Golang官方添加了ECH客户端支持: commit 578575 示例实现 GitHub项目: 0xCaner/DoH2ECH_ demo 编译方法 使用方式 示例命令: 连接测试特点 DNS查询:仅向dns.alidns.com发送请求(可替换为任意DoH服务) SNI可见性:只能看到cloudflare-ech.com 真实请求:inner-client-hello包使用公钥加密在Extension中,流量设备无法发现真实目标网站 验证ECH支持 可通过以下链接验证浏览器是否支持ECH: https://tls-ech.dev/ https://cloudflare-ech.com/cdn-cgi/trace 技术优势 增强隐私保护 防止SNI嗅探 绕过网络审查(测试可绕过GFW) 完整加密握手过程 注意事项 目前主要依赖CloudFlare实现 DNS查询建议使用DoH加密 公钥可能定期更新 需要客户端和服务器端同时支持