python - 修补 python eventlet 以解决 Ubuntu 12.04 中的 OpenSSL TLS 1.1 错误

标签 python ssl ubuntu-12.04 eventlet

我刚刚遇到了 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/

相关文章:

python - 如何处理日志格式字符串中的可选参数?

python - 如何忽略 python 2.6 中的证书?

c - 如何自动删除空行 - kdevelop

Python线程问题,raw_input()阻塞线程,线程失控

python - 是否可以在 Numpy 矢量化广播操作期间访问当前索引?

python - SQLAlchemy:具有复合主键的同一个表的多个外键

Magento升级错误: Uri doesn't contain host part

ios - 将 TLS V1.1/V 1.2 与 NSURLConnection 结合使用

Apache /SNI : disabled or non-existent subdomain leads to other SNI subdomain being served

php - 在 PHP 5.4.9 (x64) 上安装 libssh2-php