web-dev-qa-db-ja.com

自己署名SSL証明書を信頼するPythonリクエストを取得する方法は?

import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)

URLが自己署名証明書を使用する場合、これは失敗します

requests.exceptions.SSLError: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

次のように、Falseverifyパラメーターに渡すことができることを知っています。

r = requests.post(url, data=data, verify=False)

ただし、ディスク上の公開キーのコピーへの要求をポイントし、その証明書を信頼するように伝えたいと思います。

45
Matthew Moisen

試してください:

r = requests.post(url, data=data, verify='/path/to/public_key.pem')
37
krock

verifyパラメーターを使用すると、カスタム認証局バンドルを提供できます( http://docs.python-requests.org/en/latest/user/advanced/ ):

requests.get(url, verify=path_to_bundle)

信頼できるCAの証明書を使用して、CA_BUNDLEファイルへのパスを検証できます。この信頼できるCAのリストは、REQUESTS_CA_BUNDLE環境変数を通じて指定することもできます。

ローカル証明書を指定して、クライアント側の証明書、単一のファイル(秘密鍵と証明書を含む)、または両方のファイルのパスのタプルとして使用することもできます。

>>> requests.get('https://kennethreitz.com', cert=('/path/server.crt', '/path/key'))
<Response [200]>
34

最も簡単な方法は、プライベート認証局または特定の証明書バンドルを指す変数REQUESTS_CA_BUNDLEをエクスポートすることです。コマンドラインで次のように実行できます。

export REQUESTS_CA_BUNDLE=/path/to/your/certificate.pem
python script.py

認証機関があり、次のようにREQUESTS_CA_BUNDLE~/.bash_profileに追加できるたびにexportを入力したくない場合:

echo "export REQUESTS_CA_BUNDLE=/path/to/your/certificate.pem" >> ~/.bash_profile ; source ~/.bash_profile
14
Mike N

複数の証明書が必要な場合は、次のように解決されました。複数のルートpemファイル、myCert-A-Root.pemおよびmyCert-B-Root.pemをファイルに連結します。次に、リクエストREQUESTS_CA_BUNDLE varをmy ./.bash_profileのそのファイルに設定します。

$ cp myCert-A-Root.pem ca_roots.pem
$ cat myCert-B-Root.pem >> ca_roots.pem
$ echo "export REQUESTS_CA_BUNDLE=~/PATH_TO/CA_CHAIN/ca_roots.pem" >> ~/.bash_profile ; source ~/.bash_profile
3
Halbert Stone

export SSL_CERT_FILE=/path/file.crtを設定すると、仕事をするはずです。

1
gizzmole

あなたが試すことができます:

settings = s.merge_environment_settings(prepped.url, None, None, None, None)

詳細はこちらをご覧ください: http://docs.python-requests.org/en/master/user/advanced/

0
gan

Httplib2のCA(私の場合はCharles Proxy)を追加するために誰かがたまたまここに着いた場合(私の場合はCharles Proxy)、pythonに含まれるcacerts.txtファイルに追加できるようです_ パッケージ。

例えば:

cat ~/Desktop/charles-ssl-proxying-certificate.pem >> /usr/local/google-cloud-sdk/lib/third_party/httplib2/cacerts.txt

他のソリューションで参照されている環境変数は、リクエスト固有のものであり、私のテストではhttplib2によって取得されませんでした。

0
Mat Schaffer