2016-05-30 7 views
4

デフォルトでは、Pythonのhttplib .HTTPSConnectionは、システムのトラストストアを使用してHTTPS証明書を検証しています。 (どのように)検証を行うために別のCAリストを設定して、デフォルトのものを置き換えることができますか?Pythonのhttplibで使用されるトラストストアを設定するには?

httplib(下記参照)で使用されているSSLContextを設定しようとしましたが、これは特定のファイルからcertsを追加するだけです。必要であれば、バリデーターがシステムのストアからより多くの証明書をロードするのを止めることはありません。

c = ssl.SSLContext(ssl.PROTOCOL_TLSv1) 
c.load_verify_locations(cafile='mozillacerts.pem', capath=None) 

conn = httplib.HTTPSConnection(domain, port, context=c) 

明確にする:私は与えられたファイルに本命と信頼のパスを検証することができない場合は、検証が失敗します。

(。私は、このためのDebian 8でPython 2.7.11を使用しています)

答えて

-1

ステファン、私はあなたの試みには二つの問題を参照してください:あなたはすでに古くなっているのTLSv1 ssl.PROTOCOL_SSLv23を使用してはいけません。変数の名前を混同しないでください。リンクされたドキュメントを読んで、それが正しい値であることを理解してください。

既定で認識される適切なSSL証明書を生成するのではなく、既定の証明書ストアを変更する必要はありません。

https://letsencrypt.orgから無料のSSL証明書を取得できます。これらの証明書は、すべてのブラウザ、Python、およびJavaアプリケーションでもデフォルトで認識されています。

証明書ストアで再生する必要はありません。これは危険なもので、プラットフォームによって異なります。マイナーな更新でも大きな変化が見られます。

+0

こんにちはソリン、あなたの答えをありがとう!最初に、プロトコル定数についての発言のおかげで、私は実際にここでその名前に惑わされました。次に、私はLet's Encryptを認識していますが、特定のブラウザの動作をシミュレートする必要があるため、どのCAが使用されているかを制御する必要があります。それは私が検証するサイトを取得することとは何の関係もありません。 – Stefan

-1

これは本当に可能ではないようですが、私たちはPython-requestsを使用して問題を解決しました。なぜなら、CAバンドルを設定できるからです。

requests.get('https://' + domain, verify='mozillacerts.pem') 

も参照してください:Requests documentation: SSL Cert Verification

関連する問題