Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
darhwa opened this issue May 31, 2020 · 1 comment
Closed

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

darhwa opened this issue May 31, 2020 · 1 comment

Comments

@darhwa
Copy link
Contributor

darhwa commented May 31, 2020

看到昨天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

@nicholascw
Copy link
Contributor

v2ray/discussion#704 的每一条回复都看到了,4.23.2 是基本解决了包内容里的 constant string, 关于请求头只有 http2 和 要不要用 uTLS 还在讨论, #2518 也说了今后很可能引入 uTLS。 留 v2ray/discussion#704 open 的原因之一也是如此。 后续的变动和相关更新讨论会继续在 #2518v2ray/discussion#704 进行。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants