Python 2.6を使用して立ち往生しています。TLS1.2を使用して投稿リクエストを送信する必要があります。Python 2.6のrequests
ライブラリはTLSをサポートしていますか? 1.2?リクエストがTLS1.2を介して行われ、他のバージョンでは行われないことを確認/確認するにはどうすればよいですか?
サンプルリクエストは
r=requests.post(url,data=payload,verify=False)
フォーラムのどこかで、これをサポートするにはpyOpenSSL
をコンパイルする必要があることを知りました。もっと簡単な方法はありますか?
Python 2.6のssl
モジュールは、TLS 1.0までしかサポートしていません。追加の依存関係(推奨するpyOpenSSLなど)を導入したくない場合は、次のようにアップグレードする必要があります。 Python 2.7または3.x。TLSの新しいバージョンのサポートを取得します。
Python 2.7.9以降で特定のバージョンのTLSを強制するには、 SSLContext
を適切 PROTOCOL_*
定数 。その後、独自のSSLContext
を提供できる任意のAPIで使用できます。
import ssl
import urllib2
ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
# set other SSLContext options you might need
response = urllib2.urlopen(url, context=ctx)
特定のプロトコルバージョン以降(将来のバージョンを含む)を使用するには、ssl.PROTOCOL_SSLv23
を使用してから、使用しないプロトコルバージョンを無効にします。
ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
# allow TLS 1.2 and later
ctx.options |= ssl.OP_NO_SSLv2
ctx.options |= ssl.OP_NO_SSLv3
ctx.options |= ssl.OP_NO_TLSv1
ctx.options |= ssl.OP_NO_TLSv1_1
特定のプロトコルバージョンを強制するために、リクエストでカスタムSSLContext
を使用する場合、 ドキュメントによる これを行う方法がないようです、 ドキュメントからの次の例を参照 。
コードをアップグレードできない場合は、Squidサーバーまたはnginxを使用して接続をプロキシできるはずです。イカの「バンプ」メソッドの例を次に示します。
Squidを使用してクライアントのTLS接続をアップグレードできますか?
もう1つのオプションは、プロキシを維持しながらURL(httpからhttps)を書き換え、アプリケーションがhttpにリクエストを送信するようにすることです(奇妙に見えますが、正しく実装されていれば機能します)。