我可以在python 2中使用TLS 1.1或1.2版吗?

时间:2013-09-04 06:15:52

标签: python ssl openssl

我阅读的文档说Python 2只有ssl.PROTOCOL_TLSv1常量,并且在Python 3.4中添加了ssl.PROTOCOL_TLSv1_1ssl.PROTOCOL_TLSv1_2。那么如何在Python 2中使用TLS 1.1和1.2?

PS。我不想使用TLS 1.0,因为它有一些安全漏洞。 TLS 1.2现在是最新版本,所以我想让我的程序只使用TLS 1.2;如果服务器不支持TLS 1.2,那么只是使连接失败。

3 个答案:

答案 0 :(得分:11)

我很抱歉重新提出一个旧问题,似乎会​​为{2.7}提供TLS1.1 and TLS1.2的支持,计划在December 2014左右发布。

答案 1 :(得分:3)

我最近不得不使用相互认证的SSL终止TLSv1.2连接,而这不是vanilla 2.7.8。我即将开始痛苦地将我的网络i / o密集型应用程序移植到Python 3,将每个字符串更改为字节,然后返回到recv / send。它会很糟糕。

然后我找到了PEP466。您可以很容易地将PEP466(Google it)中的补丁应用到2.7.7或2.7.8,以使TLS 1.1和TLS 1.2正常工作。

PEP 466的补丁是@ http://bugs.python.org/file36423/ssl-backport.diff

此外,您需要以下补丁来修复与Unicode相关的错误,该错误会在SSL代码中构造错误时导致段错误:

此补丁是@ http://bugs.python.org/file36017/unicode_fromformat.patch

此外,一旦应用了补丁,在配置和编译之前,您应该在技术上执行以下操作:

~/Python-2.7.8$ python3 ./Tools/ssl/make_ssl_data.py /usr/include/openssl/ _ssl_data.h
~/Python-2.7.8$ mv _ssl_data.h Modules/_ssl_data.h

然后您可以配置&&制造&& make install,应该很好地使用TLSv1.1和TLSv1.2。

~/Python-2.7.8$ ./configure --enable-unicode=ucs2 --prefix=/opt/Python-2.7.8/ --with-pth && make -j && sudo make install

TLS 1.2现在可以正常使用,所以我不需要将一个巨大的应用程序移植到Python 3。

无论如何,PEP页面上的措辞令人困惑,它听起来像12月份的2.7.9应该包括这个支持(?)但是我不确定这是否是准确的,或者这只是一个手动解决方法,直到将代码移植到Python 3.我认为这并不重要。

答案 2 :(得分:1)

在Python 2中没有为TLS 1.1或1.2计划的支持,请参阅:

http://bugs.python.org/issue16692

明确指出TLS> 1.0不会被反向移植到Python 2.7,并且Python维护者多次声明Python 2.8不会发生。

请注意,目前很少有服务器支持TLS 1.2。希望它将来会改变。