web-dev-qa-db-ja.com

Pythonで検証するSSL証明書を取得する方法は?

EssentialSSLから安価な証明書を取得しました(ComodoがCAです)。Pythonがそれを認識しなかったことに驚きました。

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

証明書はすべての主要なブラウザで適切に認識されているようですが、Pythonは検証しません。

可能であれば、パッケージまたはスクリプトのインストールのような単純なインストールソリューションを好むでしょう。

認識されたCA証明書のデフォルトリストにComodoが表示されないことに少し驚いていました。すべての主要(5)ブラウザーはそれを受け入れますが、Ubuntu wget/python/...は受け入れません(opensslが原因だと思います)。

2
sorin

Debianパッケージ ca-certificates を使用します。これは、Mozilla Firefox/Thunderbird/etcのすべてのCA証明書を(他に加えて)組み込みます。使用します。

次のように、Pythonで証明書ファイル(すべての証明書が1つ、PEM形式)を使用できます。

ssl_sock = ssl.wrap_socket(sock,  
                           ca_certs="/etc/ssl/certs/ca-certificates.crt",  
                           cert_reqs=ssl.CERT_REQUIRED  
                          )
2
Dominik