使用 Go1.24 的 http.Client 实现 tls ech
ECH stands for Encrypted Client Hello.
官方文档里面好像没提到怎么用
流程大概是:
- 获取 ECH 密钥
- 把密钥填到
TLSClientConfig
- 启动!
获取 ECH 密钥
先从 doh/dot 获取加密用的密钥,这里可以使用 google dns 的网页端获取,在 data 里面有一段 ech=xxxxx
的数据,xxxxx
就是 base64 后的密钥。
1 | { |
http1/2
把密钥抠下来,贴到下面的代码就能运行了。
1 | package main |
请求成功后,可以在回包看到 sni=encrypted
,说明成功触发 ECH 了。总的回包大概如下:
1 | fl=fdsfas |
http3
同样的,quic-go 也只需要设置一下 EncryptedClientHelloConfigList
,就可以实现 ECH
1 | package main |
回包如下:
1 | fl=fdsfas |