我刚刚遇到了 bug in OpenSSL in Ubuntu 12.04 with TLS connections我需要解决这个问题。 错误简介 - Ubuntu 12.04 上 OpenSSL 实现中的错误导致对使用 TLS 1.1 的 HTTPS 的各种调用随机失败。
上面的链接还提供了常用的 python 解决方法,它基本上强制使用 TLS 1.0 而不是 TLS 1.1。然而,这种解决方法对我来说并不适用,因为我使用的是实现非阻塞 HTTP 请求的 eventlet lib。
据我了解 - eventlet 库重新定义了一些与此事相关的类,特别是 - 我需要修补以强制执行 TLS 1.0 的 httplib.HTTPSConnection
类。
所以问题是 - 我到底需要在 eventlet 中修补什么,或者重新定义什么来通过 eventlet 对非阻塞 HTTP 调用强制执行 TLS 1.0 连接?
最佳答案
首先,您应该升级 eventlet。截至 2013 年 9 月,最新版本为 0.14,自 0.9.16 以来我们修复了大量错误。
其次,那里提供的解决方案有点过于复杂,仅修复了httplib
。如果他们为 ssl
提供解决方案,它还将修复 HTTPS 并与 eventlet 一起使用。
这是 Python 2.6+ 的一个更简单的版本,修复了所有 SSL 套接字:
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 的良好版本。
关于python - 修补 python eventlet 以解决 Ubuntu 12.04 中的 OpenSSL TLS 1.1 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18807819/