openvpn,选项tls-cipher不工作,没有共享密码

在尝试设置openvpn时,我在网站上偶然发现了这个提示 。 它说,你可以限制密码列表,以防止降级攻击。 我用2台计算机在局域网上testing了它们,都使用OpenVPN 2.3.2运行kubuntu 14.04。

在openvpn服务器上的server.conf中,我插入了这一行

tls-cipher TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256

通过执行openvpn --show-tls并比较输出结果,我确信每一个上面的密码都被我的openvpn版本(在服务器和客户端上)所知。

但是当我启动openvpnserver和客户端后,服务器给我下面的输出

Fri Sep 25 12:31:59 2015 "THECLIENTSIP":38749 TLS: Initial packet from [AF_INET]"THECLIENTSIP":38749, sid=d9c33d37 653b2f0e Fri Sep 25 12:32:00 2015 "THECLIENTSIP":38749 TLS_ERROR: BIO read tls_read_plaintext error: error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher Fri Sep 25 12:32:00 2015 "THECLIENTSIP":38749 TLS Error: TLS object -> incoming plaintext read error Fri Sep 25 12:32:00 2015 "THECLIENTSIP":38749 TLS Error: TLS handshake failed Fri Sep 25 12:32:00 2015 "THECLIENTSIP":38749 SIGUSR1[soft,tls-error] received, client-instance restarting没有tls-cipher选项,它工作正常。

我不明白为什么它说“没有共享密码”。 列出与冒号分开的密码是否是错误的? 或者这里有什么问题?

感谢您的阅读。 我希望任何人都可以帮助我。

编辑我用tls-cipher TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256replaceserver.conf中的行,看看会发生什么。 和openvpn服务器的输出是一样的。

编辑2

我进一步search,发现这个网站https://community.openvpn.net/openvpn/wiki/Hardening ,现在明白,OpenVpn 2.3.2只支持SSLv3 / TLSv1.0密码套件。 但openvpn --show-tls也显示TLSv1.2密码套件

限制到TLSv1.0 DHE + RSA选项产生以下列表,适用于<= 2.3.2同位体。 DES的select是最好的避免,特别是单DES(已知非常弱)。

TLS-DHE-RSA-WITH-AES-256-CBC-SHA

TLS-DHE-RSA-WITH-茶花-256-CBC-SHA

TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA

TLS-DHE-RSA-WITH-AES-128-CBC-SHA

TLS-DHE-RSA-WITH-SEED-CBC-SHA

TLS-DHE-RSA-WITH-茶花-128-CBC-SHA

TLS-DHE-RSA-WITH-DES-CBC-SHA

避免使用所有DES密码套件:已知DES是非常弱的(3DES-EDE还是不错的)避免使用所有RC4密码套件:已知RC4较弱避免使用所有EXPORT密码套件:多年前EXPORT被指定为弱

当我在server.conf中使用这些密码时,它就起作用了,例如tls-cipher TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA

可悲的是,在那个页面上没有写出我自己可以屈服的程度……有人知道吗?

因为TLSv1.0是SSLv3,openvpn说它使用OpenSSL,我试图通过OpenSSL获取这些信息,使用grep openssl ciphers -v | grep SSLv3 | grep Kx=DH过滤openssl ciphers -v | grep SSLv3 | grep Kx=DH openssl ciphers -v | grep SSLv3 | grep Kx=DH openssl ciphers -v | grep SSLv3 | grep Kx=DH但是输出是不同的(例如单词WITH不会出现在该列表中)

假设可能只有一个区别,我试图用sed代替一些文本openssl ciphers -v | grep SSLv3 | grep Kx=DH | grep DHE-RSA | sed 's/DHE-RSA/TLS-DHE-RSA-WITH/g' | awk '{print $1}' openssl ciphers -v | grep SSLv3 | grep Kx=DH | grep DHE-RSA | sed 's/DHE-RSA/TLS-DHE-RSA-WITH/g' | awk '{print $1}' openssl ciphers -v | grep SSLv3 | grep Kx=DH | grep DHE-RSA | sed 's/DHE-RSA/TLS-DHE-RSA-WITH/g' | awk '{print $1}'打印:

TLS-DHE-RSA-WITH-AES256-SHA TLS-DHE-RSA-WITH-CAMELLIA256-SHA TLS-DHE-RSA-WITH-AES128-SHA TLS-DHE-RSA-WITH-SEED-SHA TLS-DHE-RSA-WITH-CAMELLIA128-SHA

但这仍然是不一样的“硬化openvpn文章”的名单,我不舒服,如果这是正确的方式反正… … –

鼓励使用DHE-RSA-AES256-SHA的本网站 。 所以,我认为,我可以使用openvpn 2.3.2最安全的tls-cipher是TLS-DHE-RSA-WITH-AES-256-CBC-SHA。 但是答案是2013年11月。那还是最好的select吗? 不知何故,这是一个不同的问题。 但是这是关于find最安全的tls-cipher选项的。

编辑3好吧,我可以exted那个openssl-grep-sed命令

openssl ciphers -v | grep SSLv3 | grep Kx=DH | grep DHE-RSA | sed 's/DHE-RSA/TLS-DHE-RSA-WITH/g' | sed 's/SHA/CBC-SHA/g'| awk '{print $1}'

打印:

TLS-DHE-RSA-WITH-AES256-CBC-SHA TLS-DHE-RSA-WITH-CAMELLIA256-CBC-SHA TLS-DHE-RSA-WITH-AES128-CBC-SHA TLS-DHE-RSA-WITH-SEED-CBC-SHA TLS-DHE-RSA-WITH-CAMELLIA128-CBC-SHA

现在与没有DES和3DES条目的文章一样。

那现在是正确的结果了吗? 因为这个解决scheme只是基于openssl -v命令的输出和openvpn –show-tls命令之间只有不同的符号的假设。

编辑4没有对不起,这是不是那个没有DES和3DES条目的文章相同的列表..现在是:

openssl ciphers -v | grep SSLv3 | grep Kx=DH | grep DHE-RSA | sed 's/DHE-RSA/TLS-DHE-RSA-WITH/g' | sed 's/SHA/CBC-SHA/g'| sed 's/AES/AES-/g' | sed 's/CAMELLIA/CAMELLIA-/g' | awk '{print $1}' openssl ciphers -v | grep SSLv3 | grep Kx=DH | grep DHE-RSA | sed 's/DHE-RSA/TLS-DHE-RSA-WITH/g' | sed 's/SHA/CBC-SHA/g'| sed 's/AES/AES-/g' | sed 's/CAMELLIA/CAMELLIA-/g' | awk '{print $1}'打印:

TLS-DHE-RSA-WITH-AES-256-CBC-SHA TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA TLS-DHE-RSA-WITH-AES-128-CBC-SHA TLS-DHE-RSA-WITH-SEED-CBC-SHA TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA

但这是一个混乱的方式,不是吗? 而且只有这样才能起作用,如果密码的名字不增长的话。

对不起,如果“问题”可能会令人困惑…请评论,非常感谢,如果你至less花时间阅读这个!

我不认为OpenVPN支持ECDHE – 我已经在Debian 8.3(稳定)和2.3.10的Debiantesting中尝试过OpenVPN 2.3.4作为服务器,当使用ECDHE密码组指定tls-cipher时,运行2.3.10的Windows客户端。 到目前为止,只有DHE的工作。