-
Notifications
You must be signed in to change notification settings - Fork 8.9k
Description
看到昨天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.1
或h2
的alpn,两者共同作为特征,仍然可以100%准确匹配使用ws/h2/tcp连接模式并开启TLS的v4.23.2版本的v2ray。概念验证我这里就不做了(没有必要),有兴趣的可以自己去尝试。墙要更新一下这个匹配模式,不过举手之劳。 -
golang的tls.Config里有一个参数ClientSessionCache,默认值是nil。而v2ray里面默认则是有的。这会导致ClientHello里会多出两个扩展,
session_ticket
与psk_key_exchange_modes
。其他的golang程序,是没有这两个的。(这点我不完全确定,如果有反例请纠正我。)当然,你可以说,chrome与firefox也有这两个啊。但是人家一看就是chrome或者firefox,不是golang。
解决这两个问题后,v2ray才会至少在ClientHello上看上去与其他golang程序完全一样。
为了引起关注,在此点几个名,见谅: @vcptr @kslr @p4gefau1t @DuckSoft @Qv2ray-dev