2

我刚刚在带有 TLS 连接的 Ubuntu 12.04 中的 OpenSSL 中遇到了一个错误,我需要解决它。错误简介 - OpenSSL 实现中的 Ubuntu 12.04 错误使使用 TLS 1.1 对 HTTPS 的各种调用随机失败。

上面的链接还提供了通常的 python 解决方法,它基本上强制使用 TLS 1.0 而不是 TLS 1.1。然而,这种解决方法并不适合我开箱即用,因为我使用的是实现非阻塞 HTTP 请求的 eventlet 库。

据我了解 - eventlet 库重新定义了一些与此事相关的httplib.HTTPSConnection类,特别是 - 我需要修补以强制执行 TLS 1.0 的类。

所以问题是——我到底需要在 eventlet 中修补什么,或者重新定义什么来强制通过 eventlet 进行非阻塞 HTTP 调用的 TLS 1.0 连接?

4

2 回答 2

1

首先,您应该升级 eventlet。截至 2013 年 9 月,最新版本是 0.14,我们从 0.9.16 开始修复了大量错误。

其次,那里提供的解决方案有点过于复杂,只能修复httplib. 如果他们提供解决方案ssl,它还将修复 HTTPS 并与 eventlet 一起使用。

这是修复所有 SSL 套接字的 Python 2.6+ 的更简单版本:

import functools
import ssl

old_init = ssl.SSLSocket.__init__

@functools.wraps(old_init)
def ubuntu_openssl_bug_965371(self, *args, **kwargs):
  kwargs['ssl_version'] = ssl.PROTOCOL_TLSv1
  old_init(self, *args, **kwargs)

ssl.SSLSocket.__init__ = ubuntu_openssl_bug_965371

我现在无法访问损坏的系统,所以我无法真正测试它。不会破坏良好版本的 openssl。

于 2013-09-16T08:18:31.893 回答
1

一个对我有用的简单修复是覆盖 SSL 的默认协议:

import ssl
ssl.PROTOCOL_SSLv23 = ssl.PROTOCOL_TLSv1
于 2014-06-26T03:23:22.203 回答