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
次のように、False
をverify
パラメーターに渡すことができることを知っています。
r = requests.post(url, data=data, verify=False)
ただし、ディスク上の公開キーのコピーへの要求をポイントし、その証明書を信頼するように伝えたいと思います。
試してください:
r = requests.post(url, data=data, verify='/path/to/public_key.pem')
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]>
最も簡単な方法は、プライベート認証局または特定の証明書バンドルを指す変数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
複数の証明書が必要な場合は、次のように解決されました。複数のルート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
export SSL_CERT_FILE=/path/file.crt
を設定すると、仕事をするはずです。
あなたが試すことができます:
settings = s.merge_environment_settings(prepped.url, None, None, None, None)
詳細はこちらをご覧ください: http://docs.python-requests.org/en/master/user/advanced/
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によって取得されませんでした。