web-dev-qa-db-ja.com

Pythonは「証明書の検証に失敗しました」を要求します

Pythonリクエストを使用するミニアプリ+ HTTPSを維持しています。

アプリは、HTTPS URLのホスト名のIPアドレスが(正当に)変更されるまで機能しました。ブラウザでURLを指定すると、正常に取得できます。

Python /リクエストはsshのknown_hostsの類似物をどこに保持しますか?このホストでそれをクリアするにはどうすればよいですか?

$ python --version
Python 2.7.3

$ cat foo.py 
import requests
url = "https://somehost/resource.json"
requests.get(url, timeout=5, config={'danger_mode': True})

$ source venv/bin/activate
$ python foo.py 
Traceback (most recent call last):
  File "foo.py", line 3, in <module>
    requests.get(url, timeout=5, config={'danger_mode': True})
  File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/api.py", line 65, in get
return request('get', url, **kwargs)
  File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/safe_mode.py", line 39, in wrapped
return function(method, url, **kwargs)
  File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/api.py", line 51, in request
return session.request(method=method, url=url, **kwargs)
  File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 241, in request
r.send(prefetch=prefetch)
  File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/models.py", line 641, in send
raise SSLError(e)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL     routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
15
Garrett Smith

リクエストの古いバージョンを使用しています。 2.0にアップグレードし、サイトに証明書の不一致がある場合は、中間証明書を検証できるシステム証明書を指定することで、より役立つメッセージが表示されます。 Andreが提案したように、証明書を検証しないようにリクエストすることもできます。

質問で言及されたサーバーのアップグレード中に、誤って署名された証明書がインストールされたことが判明しました。 WindowsブラウザーマシンとUbuntuの間のルート証明書の違いにより、ブラウザーでHTTPSが機能しましたPythonクライアント。Pythonがインストールされている同じUbuntuマシンからのブラウザーを介したHTTPS =実行すると、証明書の問題の詳細が明らかになりました。

IPの変更は、問題を混乱させることを除いて、問題とはほとんど関係がありませんでした。

私のコメントを回答に昇格する:

  1. これは私の質問に答えました
  2. この質問は私が知識を共有したい十分なトラフィックを得ています。
2
Garrett Smith

上記が機能せず、ローカルであることがわかった場合、この解決策は私にとってうまくいきました...

基本的にPythonフォルダ内のInstall Certificates.commandファイルを実行します。

https://www.dev2qa.com/how-to-fix-python-error-certificate-verify-failed-unable-to-get-local-issuer-certificate-in-mac-os/ =

0
Christopher