バージョン2.12.0+要求を使用している場合は、あなたが(SSLContextの設定OPが尋ねた後で、このブログの記事が書かれたことに注目することができるようにする新機能について説明しConfiguring TLS With Requests上のブログの記事があり、質問):
要求しv2.12.0で追加された機能はurllib3が今のConnectionPoolオブジェクトのコンストラクタに SSLContextオブジェクトを受け入れることです。この SSLContextは、基盤となるTLS 接続のファクトリとして使用されるため、適用されるすべての設定は、これらの低レベル接続の にも適用されます。
これを行う最善の方法は、SSLContextファクトリ関数 requests.packages.urllib3.util.ssl_.create_urllib3_contextを使用することです。これはPythonのssl.create_default_context関数に似ている ですが、 には、Requestsとurllib3がともに使用するより厳密なデフォルトTLS設定が適用されます。 この関数は、 にさらに設定を適用できるSSLContextオブジェクトを返します。さらに、 の関数は、デフォルト設定を上書きできるようにいくつかの引数をとります。
新しいSSLContextオブジェクトを提供するには、特定のホストに適切な TransportAdapterを記述する必要があります。
次のサンプルコードは、このメソッドを使用してリクエストで3DESを再度有効にする方法の例として示されています。
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.ssl_ import create_urllib3_context
# This is the 2.11 Requests cipher string, containing 3DES.
CIPHERS = (
'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:'
'DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES:!aNULL:'
'!eNULL:!MD5'
)
class DESAdapter(HTTPAdapter):
"""
A TransportAdapter that re-enables 3DES support in Requests.
"""
def init_poolmanager(self, *args, **kwargs):
context = create_urllib3_context(ciphers=CIPHERS)
kwargs['ssl_context'] = context
return super(DESAdapter, self).init_poolmanager(*args, **kwargs)
def proxy_manager_for(self, *args, **kwargs):
context = create_urllib3_context(ciphers=CIPHERS)
kwargs['ssl_context'] = context
return super(DESAdapter, self).proxy_manager_for(*args, **kwargs)
s = requests.Session()
s.mount('https://some-3des-only-host.com', DESAdapter())
r = s.get('https://some-3des-only-host.com/some-path')
ありますがgithub pages for the requests module上で読むことができる可能ハックが、またある、またはhttps://stackoverflow.com/a/32651967/2364215ではなく、それはとして、私はそれをお勧めしません(どちらも要求モジュールの作者をしない、基礎となるライブラリコードを修正あなたはそのページにあります)。一方、古いリクエストパッケージを使用しており、アップグレードできない場合は、最善の選択肢かもしれません。それはurllib3モジュールのDEFAULT_CIPHERS
を上書きになる:
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += ':RC4-SHA'
あなたが変更を行った後に要求モジュールを使用する他のコードを持っていますが、変更を必要としない場合、あなたはその前の値にDEFAULT_CIPHERS
を復元することもできます。