V2ray-core: TLS 的一些问题

Created on 28 Dec 2016  ·  10Comments  ·  Source: v2ray/v2ray-core

最近看了一下 TLS 的资料,折腾几天已经在 V2Ray 配置成功。但是有几个不明白的地方:

1. 使用了 TLS 之后速度下降很厉害。
使用 TLS 之前看 Youtube 有 3000 kbps 左右,FDM 下载 4 MB/s,使用之后 Youtube 300kbps 不到,FDM 下载 200 kB/s。我想单纯的 TLS 握手造成的延时和密钥交换时的非对称加密应该不足以造成这么大性能的下降。(我已经关闭了VMess 的加密)

  1. V2Ray 的 TLS 能否工作在 mKCP 之上?
    当我将 tcp 改成 kcp 时,速度提升非常大,比关闭了 TLS 时的 TCP 还要快,快得让我觉得不正常,我不确定使用 mKCP 时 TLS 是否工作正常。
    产生这样的疑惑是因为:
  2. 我 Google TLS over UDP,查到相关文章的结果都是与 DTLS 有关(更深层次的内容我就看不懂了),然而 manual 明确说明 V2Ray 的 TLS 不支持 DTLS。
  3. V2Ray 最近有个 fix tls over kcp 的 commit https://github.com/v2ray/v2ray-core/commit/bccf11c12c8261ccd54926660a2d2d4b6f86e61c
  4. 这样的情况下我尝试用 Wireshark 抓包,可能是我不太会用,也可能是 Wireshark 对协议的检测比较低级,我抓包看到的结果是协议是 QUIC (因为用的是 443 UDP 端口?)。
    前两点的矛盾令我不解

3. 证书能否在 LAN 使用?
由于第 1 个问题,我打算过几天在 LAN 中测试一下 TLS,看是否性能下降严重,但问题是没有公网 IP。我想到的办法是 LAN 中的服务端使用我 VPS 上的证书,客户端配置 outbound 的 address 使用 IP,同时在 tlsSettings 的 serverName 指定我 VPS 的域名。不知这样是否可行?

第 1 和 第 3 个问题已解决。第一个问题原因是我之前的 VPS 性能太差(bandwagon 超售技术真不错),换了一个 KVM 的 VPS 就比较正常了。第三个问题亲测可以。
还请解答一下第 2 个问题。

Most helpful comment

@ToutyRater TLS在443端口上表现优异,看了你的配置教程,其实配置TLS不用域名(CN不一定非得要域名),使用自签名证书即可(需要在两端开启"allowInsecure": true)
比如:
openssl genrsa -out tls_test.key 2048
openssl req -new -x509 -key tls_test.key -out tls_test.cert -days 3650 -subj /CN=tls_test

All 10 comments

@ToutyRater TLS在443端口上表现优异,看了你的配置教程,其实配置TLS不用域名(CN不一定非得要域名),使用自签名证书即可(需要在两端开启"allowInsecure": true)
比如:
openssl genrsa -out tls_test.key 2048
openssl req -new -x509 -key tls_test.key -out tls_test.cert -days 3650 -subj /CN=tls_test

@testcaoy7 多谢指点。但是这样并不好,有安全上的问题

@ToutyRater 自签名证书可以被MITM,但是MITM的成本很高(需专门设备),在动态IP地址和VPS的情况下,用MITM来审查v2ray,我觉得不太可行,因此这个安全问题其实并不算什么真正的问题,当然,未来如果v2ray像ss一样产业化了,希望那些卖的能用可信的证书

我最近才逐渐了解 TLS,不是很具体了解 MITM 相关的东西,Google 了一下,就发现有一个相关的开源项目 mitmproxy,我想这样的东西应该有产业链了。不过我认同你不可能利用 MITM 审查 V2Ray 的观点。
但是我不打算将自签名写到我的教程上,因为用户接触新东西时大多是不明白那会意味着什么。我见过大多不将安全放在心上的,或者说是完全没有安全意识的,如 Windows 上完全使用 administrator 账户、Windows UAC 全开、Linux 全是用 root、MySQL root 密码为空、SSH key 不设密码等等。我不想将一些不安全的习惯带给我的读者。如果是老司机,没有我的教程它也会懂得这些。我认为,每个人在进行一些不安全的操作时,都应当非常清楚自己在做什么。

对于 2,kcp 是模拟 tcp 数据流。kcp 数据包使用的是自定义格式,和 DTLS 没有关系,其中传输的数据和 TCP 的 TLS 一样。也就是说,加不加 TLS,只对数据安全性有关,和 kcp 数据包的安全性无关。

至于 kcp 本身的安全性,之后会引入单独的设定。

@v2ray 也就是说,KCP+TLS,传输层还是UDP,只不过传输的数据变成TLS的数据(相当于额外加密),对吗

是的

@v2ray 明白了,多谢你的解答。

@testcaoy7 @ToutyRater 经验证,在使用自签名证书的情况下,不需要开启 "allowInsecure": true 也可以两边都使用TLS。所以可以写一篇用自签名的证书进行TLS的教程啦~

有人写用XCA产生的自签名证进行TLS的教程了吗?

Was this page helpful?
0 / 5 - 0 ratings