我有一项任务是创建一个安全通信的套接字服务器和客户端。我必须使用TLS 1.1或1.2来避免BEAST攻击。我们给了Python 2.6版,但是它不支持TLS 1.1或1.2。
你们知道有没有在Python 2.6中实现的外部库,或者我最好使用增加支持的Python 3.4开发版本?
答案 0 :(得分:3)
通过快速测试,如果您在OpenSSL 1.0.1之上构建pyOpenSSL
,看起来您获得了TLSv1.1和1.2支持。它支持Python 2.6 + / 3.2 +。
API与库存ssl
模块不同,但Connection
对象与ssl.SSLSocket
没有区别,因此移植很有可能只是一个简单的搜索 - 和-replace。
对于当前发布的版本0.13.1,存在隐式TLS 1.1和1.2支持,但无法明确请求或要求它们。您可以从客户端执行的最佳操作是设置SSLv23_METHOD
添加OP_NO_SSLv2
和OP_NO_SSLv3
选项,这样可以保证TLS 1.0,1.1或1.2。我还没有测试过你可以从服务器端做些什么。
使用中继代码(#1020632中的补丁已提交),有明确的1.1和1.2支持。从客户端,您可以使用TLSv1_1_METHOD
仅获取TLSv1.1,TLSv1_2_METHOD
仅获取TLSv1.2,并且可能(我尚未测试)SSLv23_METHOD
{{1} },OP_NO_SSLv2
和OP_NO_SSLv3
得到1.1或1.2。同样,我还没有测试过你可以从服务器端做些什么。
您应该可以OP_NO_TLSv1
安装中继线;如果没有,请查看或下载当前的tarball并pip install bzr+lp:pyopenssl
。
我的猜测是,当使用正确构建的pyOpenSSL 0.13.1和OpenSSL 1.0.0或更高版本时,你可以编写总是得到1.2的代码,但是如果客户端或服务器环境是以某种方式构建的,可能会默默地使用更糟糕的东西这不符合这些要求,无法检测到问题。如果你希望连接失败而不是在这种情况下(你可能会这样做)回退,看起来你需要一个更新的pyOpenSSL。
这是我第一次测试一台大多数干净的OS X 10.8.5机器,安装了Homebrew和pip install
:
pip
这证明(假设ssltest.org是正确的)我们不仅声称支持TLS 1.1,而且还建立了1.2或1.1连接。