OpenVPN连接2.3及更老版本服务端问题
最近由于需要连接几个公司不同的 OpenVPN 服务,各家都提供了自己的定制 OpenVPN 客户端,不胜其烦。而且个人不太喜欢使用旧版本的客户端,理论上使用最新的 OpenVPN 客户端没有道理不能连接,遂研究开始。
问题
一般情况下,需要连接的 OpenVPN 服务端版本越老,由于各种安全限制逐渐收紧,老版本使用的安全协议逐渐不受支持,问题也就越多。
这里我需要连接的最老的 OpenVPN 版本是 2.1.1 的,使用的客户端是文章编写时最新的 OpenVPN 开源客户端 2.6.10 版本。
直接使用公司提供的 ovpn 配置文件进行连接,不出意料的报错失败了。
点这里直接看结论
解决问题
问题一:TLS handshake failed
先看一下连接出现的报错。
1 | 2024-03-27 10:29:54 Received fatal SSL alert: handshake failure |
从这边的报错可以看到,是 TLS 协商握手直接就失败了。
经过相关搜索,在 OpenVPN Community 的 Wiki 中的 tls-cipher 配置部分提到了可能的原因。在 OpenVPN 2.3.2 版本之前,只有 TLSv1.0 RSA cipher 可用。在 OpenVPN 2.4 版本后,对默认的 cipher 列表添加了新的限制。
经过尝试,在 ovpn 配置中增加如下内容,使用 OpenVPN 2.4 版本能够正常进行连接。
1 | tls-cipher DEFAULT:!EXP:!LOW |
或
1 | tls-cipher DEFAULT |
问题二: data-cipher
虽然加上上面的配置在 OpenVPN 2.4 可以正常连接了,但是在 OpenVPN 2.6.10 上仍然有问题没有解决。
看看新的日志
1 | 2024-03-27 10:47:26 MANAGEMENT: >STATE:1711507646,RESOLVE,,,,,, |
这里很奇怪,证书验证正确,但是连接断开了。
从这里看不出来,那就从老版本的连接日志里看看。
1 | Wed Mar 27 11:02:31 2024 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key |
从这里我们可以看到除了简历 TCP 连接的握手,还有一个数据加密的 Cipher,这里的这个 BF-CBC 就是一个比较老旧的不安全的协议,应当早就已经被默认禁用了。
根据官方关于密码协商的 Wiki 部分,在 2.2 及更早的版本,似乎没有配置可以指定数据加密使用的 Cipher;从 2.3 版本开始新增了 cipher
配置项用于指定数据加密使用的 Cipher;从 2.5 版本开始,需要使用新配置 data-ciphers
来指定一组可用的数据加密 Cipher。
这里我就尝试将cipher
配置为BF-CBC
并没有作用,按照文档,只有服务端和客户端都配置了cipher
才行,我这边服务端才 2.1.1 版本显然是无法实现的。
转而添加以下配置进行测试。
1 | data-ciphers BF-CBC |
这个同样报错了,属于配置错误,都不进行连接了。
1 | 2024-03-27 11:24:06 Note: --cipher is not set. OpenVPN versions before 2.5 defaulted to BF-CBC as fallback when cipher negotiation failed in this case. If you need this fallback please add '--data-ciphers-fallback BF-CBC' to your configuration and/or add BF-CBC to --data-ciphers. |
可以看到 BF-CBC
不支持,想来应该是被禁用了。
经过了一些搜索,在 OpenVPN 2.6 版本需要添加以下配置,就可以正常连接了。
1 | providers legacy default |
在 OpenVPN 2.6 的使用手册中,找到了对这个配置项的说明,但没有详细内容。
总结一下
这边测试了两个版本的 OpenVPN 客户端。
在 OpenVPN 2.4 版本客户端的 ovpn 配置中需要添加
1 | tls-cipher DEFAULT:!EXP:!LOW |
在 OpenVPN 2.6 版本客户端的 ovpn 配置中需要添加
1 | tls-cipher DEFAULT:!EXP:!LOW |
即可正常连接 2.3 及更老版本的 OpenVPN,可能需要根据服务端配置进行更多的调整,以实际情况为准。
如有问题,请不吝指正。