2

TLS 接続を使用する Ubuntu 12.04 の OpenSSL でバグに遭遇したので、回避する必要があります。バグの概要 - OpenSSL 実装の Ubuntu 12.04 バグにより、TLS 1.1 を使用した HTTPS へのさまざまな呼び出しがランダムに失敗します。

通常の python の回避策も上記のリンクで提供されており、基本的に TLS 1.1 の代わりに TLS 1.0 の使用を強制します。しかし、ノンブロッキング HTTP リクエストを実装する eventlet lib を使用しているため、この回避策はそのままでは機能しません。

私が理解しているように、イベントレット ライブラリは、問題に関連するいくつかのクラス、特にhttplib.HTTPSConnectionTLS 1.0 を適用するためにパッチを適用する必要があるクラスを再定義します。

問題は、イベントレットで正確に何にパッチを当てる必要があるか、またはイベントレットを介した非ブロック HTTP 呼び出しに対して TLS 1.0 接続を強制するために何を再定義する必要があるかです。

4

2 に答える 2

1

まず、eventlet をアップグレードする必要があります。2013 年 9 月現在、最新リリースは 0.14 で、0.9.16 以降に多数のバグが修正されています。

第二に、そこで提供される解決策は少し複雑すぎて、修正するだけhttplibです。彼らが の解決策を提供した場合、sslHTTPS も修正され、イベントレットで動作します。

これは、すべての 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 に答える