关于 Encrypted client hello(ECH)的一个小提醒 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
taikobo
V2EX    宽带症候群

关于 Encrypted client hello(ECH)的一个小提醒

  •  1
     
  •   taikobo 2024-10-15 09:11:42 +08:00 4178 次点击
    这是一个创建于 429 天前的主题,其中的信息可能已经有所发展或是发生改变。

    近期 cloudflare 为 free 用户逐步开启了 ECH, V2 也已经开启, 有人在讨论 https://v2ex.com/t/1076154

    有一个自己遇到的小问题, 提示各位一下

    DNS 是依赖 HTTPS 记录(type 65)来提供服务端的 public key 和 outer SNI 的, 比如 v2 的 DNS 记录:

    https://dns.google/query?name=v2ex.com&rr_type=HTTPS&ecs=

    可以看到包含ech=AEX+DQBB4gAgACDmyFU4oeqVH/jutZB8Nu5Ve9dGQ5OnELvHv/Z7yR+ZbgAEAAEAAQASY2xvdWRmbGFyZS1lY2guY29tAAA=

    对于 chrome 来说, 即使上游是 UDP 的 DNS, 只要可以提供正确的 HTTPS 记录, 并且 chrome 自身开启了 ECH, 服务端开启了 ECH, 这三个条件满足, 就可以使用 ECH

    那么这里有一个巨大的坑, 就是 cache....

    dnsmasq 旧版本只能缓存常见类型如 A 和 AAAA, 只有在最新版 2.90 才提供了缓存其他类型记录的选项, 并且默认是不开启的, 所以后果就是, 第一次访问的时候, 你会使用 ECH, 但是如果再次访问, 命中了 DNS 缓存, 返回记录不再包含 HTTPS 记录, 就不再使用 ECH 了

    所以如果你用了 dnsmasq 作为本地 DNS forwarder(比如 Openwrt), 那么请在 conf 里加上--cache-rr=ANY或者自己手动加上多行--cache-rr=来设置所需的缓存类型

    12 条回复    2025-11-02 04:50:48 +08:00
    dzdh
        1
    dzdh  
       2024-10-15 10:08:10 +08:00   1
    想知道这个 ech 是的公钥私钥怎么生成的 nginx 需要怎么配置 其他语言如 go/rust 做 server 怎么适配。
    taikobo
        2
    taikobo  
    OP
       2024-10-15 10:55:31 +08:00
    @dzdh 技术细节请参照 https://datatracker.ietf.org/doc/draft-ietf-tls-esni/
    简单介绍请见 https://blog.cloudflare.com/announcing-encrypted-client-hello/
    nginx 好像已经支持了, 细节未知, 因为我不用
    go 的话, Google 那边的 Roland 在写, 1.24 会上
    rust 不清楚
    dreamk
        3
    dreamk  
       2024-10-15 21:56:12 +08:00
    baraja
        4
    baraja  
       2024-10-16 14:07:24 +08:00
    我测下来结果是
    linux 下,firefox 和 chrome 不开 doh 依然有 ech 。
    然而 windows 下,firefox 可以不开 doh ,chrome 不开 doh 就没有 ech ,挺奇怪的
    Cusmate
        5
    Cusmate  
       2024-10-16 14:47:05 +08:00
    如果 udp dns 返回有 HTTPS 记录并且有 ECH 数据但是 A 记录和 AAAA 记录是被污染的 IP 地址,Chrome 能打开网站吗?
    yxmyxmyyy
        6
    yxmyxmyyy  
       2024-10-17 01:09:12 +08:00
    firefox 能直接域名访问非标准端口,而 chrome 还不行,两个都支持用 udp 的 dns 获取 https 记录
    jr55475f112iz2tu
        7
    jr55475f112iz2tu  
       2024-10-18 15:41:25 +08:00
    在客户端需要什么特别的配置吗?因为我目前只是在 firefox 上启用了 DoH ,没有在系统层启用
    Coelacanthus
        8
    Coelacanthus  
       2024-10-20 20:58:56 +08:00
    @baraja Firefox 以前也是 ECH requires DoH 的,被人骂了大概有个五年多吧,最后改了。
    https://bugzilla.mozilla.org/show_bug.cgi?id=1500289
    taikobo
        9
    taikobo  
    OP
       2024-10-22 10:29:10 +08:00
    @baraja 你这个只怕是自身问题, 我就是用的 chrome, UDP dns
    taikobo
        10
    taikobo  
    OP
       2024-10-22 10:30:12 +08:00
    @Cusmate 那当然不行了, 你 IP 都是错的, client hello 加密了有啥个用...就好比你快递包裹用了个保险箱, 但是送错了地址...
    taikobo
        11
    taikobo  
    OP
       2024-10-22 10:30:52 +08:00
    @czfy 系统级没有支持, 目前就各浏览器支持了
    taikobo
        12
    taikobo  
    OP
       46 天前
    用 caddy 可以 spoof 自己的网站 outer SNI 为 cloudflare-ech.com
    具体请自行研究
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2828 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 14:31 PVG 22:31 LAX 06:31 JFK 09:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86