最近 Cloudflare 默认启用 ECH,它会导致代理软件通过嗅探 SNI 实现的域名分流功能失效,本文通过禁用 ECH 来解决此问题。另外也可配置代理软件的 DNS 查询规则让其拒绝 HTTPS 记录以达到禁用 ECH 的效果,但本文只讨论 Chromium/Chrome。

编辑注册表(Chrome&Windows)

Windows 用户可创建一个 ech.ps1 脚本,然后右键通过管理员权限运行它。

$PATH = "HKLM:\\Software\Policies\Google\Chrome\"
$NAME = "EncryptedClientHelloEnabled"
if (-not(Test-Path $PATH)) {New-Item -Path $PATH -Force}
New-ItemProperty -Path $PATH -Name $NAME -Value 0x0 -Force

手动编辑注册表

如果希望手动修改,编辑注册表 Software\Policies\Google\Chrome\EncryptedClientHelloEnabled 将其更改为 0x0 即可。

添加策略文件(Linux)

对于 Chromium&Ubuntu:mkdir -p /etc/chromium-browser/policies/managed

其它 Chromium&Linux: mkdir -p /etc/chromium/policies/managed

对于 Chrome&Linux:mkdir -p /etc/opt/chrome/policies/managed

之后添加 ech.json 配置文件到新创建的 managed 目录里,注意不要忘记配置权限。

{
  "EncryptedClientHelloEnabled": false
}

配置权限

# template
# chmod -R 755 /etc/<Your config directory>

# for Chromium&Ubuntu
chmod -R 755 /etc/chromium-browser

# for Other Chromium&Linux
chmod -R 755 /etc/chromium

# for Chrome&Linux
chmod -R 755 /etc/opt/chrome

验证策略

访问 chrome://policy/ 验证是否成功配置策略,下图为成功配置本文所述策略的状态。

chrome-policy

参考

  1. “Disabling Encrypted ClientHello in Google Chrome, and Why” Chaser Systems
  2. “Linux Quick Start - Set Up Policies” Chromium Projects