これはprevious SO postへのフォローアップです。証明書チェーンが更新されてもPython(pip)throw [SSL:CERTIFICATE_VERIFY_FAILED]
私はWindows/cygwinを使用しています。ネットワークインフラストラクチャがすべてのSSL要求を独自の証明書で辞退するため、PythonがカスタムCA証明書を理解する必要があります。
私はpip search SimpleHTTPServer
を実行しようとすると、私は次のようなエラーメッセージが出ます:
...
File "c:\users\erbe\appdata\local\programs\python\python35-32\lib\ssl.py", line 633, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)
を私は次の操作を行って、信頼された証明書の私のリストに証明書を追加しようとしました:
- コピーの/ etc/PKI/CA-信託/ソースへの私の.pemファイル/アンカー
update-ca-trust extract
私は今、生成されたPEMファイルをポイントし、正常にピップを実行することができ、これは動作することを確認しました:pip --cert /usr/local/ssl/cert.pem search SimpleHTTPServer
:
$ pip --cert tls-ca-bundle.pem search SimpleHTTPServer
ComplexHTTPServer (0.1) - A Multithreaded Python SimpleHTTPServer
SimpleTornadoServer (1.0) - better SimpleHTTPServer using tornado
rangehttpserver (1.2.0) - SimpleHTTPServer with support for Range requests
しかし、私はこれを手動でするたびに証明書を指定しなくても、仕事をしたいです。私は、Pythonが使用する証明書チェーンを更新するために期待しています:
$ python -c "import ssl; print(ssl.get_default_verify_paths())"
DefaultVerifyPaths(cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/ssl/certs')
私はシンボリックリンクのシリーズを通して、同じファイルに/usr/local/ssl/cert.pemポイントということを確認しました。しかし、pip
を実行すると、私はまだ[SSL: CERTIFICATE_VERIFY_FAILED]
というエラーメッセージが表示されます。
私はWindows版のpythonをアンインストールし、PythonのCygwin版を再インストールしました。それで、私はeasy_install-2.7 pip
を実行しました。今、少なくとも私は、エラーメッセージを表示せずに完全な証明書パスとのピップを実行することができる午前:
$ pip --cert /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem search simpleHttpServer
LittleHTTPServer (0.5.0) - Little bit extended SimpleHTTPServer
SimpleHTTP404Server (0.2.0) - A Python SimpleHTTPServer, but serves 404.html if a page is not found.
django-localsrv (0.1.2) - Django app for serving static content from different sources (files, strings, urls, etc.) at custom paths,
は、念のために、私も指すようにSSL_CERT_DIRのvaraibleを更新しようとしたのは/ etc/PKI/CA-trust- /抽出PEMと/etc/pki/ca-trust-extracted/pem/tls-ca-bundle.pemしたssl_cert_fileを設定するが、これらは動作しません:
$ set | grep SSL
SSL_CERT_DIR=/etc/pki/ca-trust/extracted/pem
SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
$ python -c "import ssl; print(ssl.get_default_verify_paths())"
DefaultVerifyPaths(cafile='/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem', capath='/etc/pki/ca-trust/extracted/pem', openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/ssl/certs')
$ pip search simpleHttpServer
Exception:
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/pip-8.1.2-py2.7.egg/pip/basecommand.py", line 215, in main
status = self.run(options, args)
...
...
File "/usr/lib/python2.7/site-packages/pip-8.1.2-py2.7.egg/pip/_vendor/requests/adapters.py", line 477, in send
raise SSLError(e, request=request)
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
を私が間違っているのか?これはCygwinとWindowsの問題ですか?どのPEMファイルを更新する必要がありますか?
バージョンをピップどちら:、証明書を追加ファイルに以下の行を入れて
? –
私はpip 8.1.2を使用しています。 'pip 8.1.2 from/usr/lib/python2.7/site-packages/pip-8.1.2-py2.7.egg' –
@KlausD。私はWindows Pythonを削除してcygwin経由でインストールしただけで、役に立たないことを示すために私の質問を更新しました。 –