Skip to content

v4.23.2并未解决TLS ClientHello的特征问题 #2522

@darhwa

Description

@darhwa

看到昨天TLS握手包特征终于成为现实问题,并且官方也更新了版本。然而,新版并未完全解决TLS ClientHello的特征问题,只是解决了CipherSuites的特征。CipherSuites特征只是ClientHello特征的一部分。既然已经讨论到之前所用ClientHello不安全的问题,何不把所有的low-hanging fruits一并全部摘完?

(注:此贴所指的“完全解决”指使v2ray与其他golang客户端程序所使用的TLS默认设置一致。至于golang的默认设置本身是否安全,是否要换用uTLS,以及uTLS到底是刻鹄类鹜还是画虎类狗,等进一步的问题,皆不在此贴讨论范围内。)

我在此再列举两条:

  • v2ray目前主流最常用的两种模式ws与h2,在ClientHello里设置的alpn分别为["http/1.1"]["h2"]。然而无论是任何主流浏览器,还是其他常见golang应用程序,使用的alpn都是["h2", "http/1.1"]。这导致的后果是,以golang默认CipherSuites,以及单独的http/1.1h2的alpn,两者共同作为特征,仍然可以100%准确匹配使用ws/h2/tcp连接模式并开启TLS的v4.23.2版本的v2ray。概念验证我这里就不做了(没有必要),有兴趣的可以自己去尝试。墙要更新一下这个匹配模式,不过举手之劳。

  • golang的tls.Config里有一个参数ClientSessionCache,默认值是nil。而v2ray里面默认则是有的。这会导致ClientHello里会多出两个扩展,session_ticketpsk_key_exchange_modes。其他的golang程序,是没有这两个的。(这点我不完全确定,如果有反例请纠正我。)当然,你可以说,chrome与firefox也有这两个啊。但是人家一看就是chrome或者firefox,不是golang。

解决这两个问题后,v2ray才会至少在ClientHello上看上去与其他golang程序完全一样。

关联: v2ray/discussion#704

为了引起关注,在此点几个名,见谅: @vcptr @kslr @p4gefau1t @DuckSoft @Qv2ray-dev

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions