Это последующая информация о previous SO post.Python (пип) бросает [SSL: CERTIFICATE_VERIFY_FAILED], даже если обновлена цепочка сертификатов
Я использую Windows/cygwin, и мне нужно, чтобы python понимал пользовательский сертификат ЦС, поскольку сетевая инфраструктура отменила все запросы SSL со своим собственным сертификатом.
Если я пытаюсь запустить 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)
Я пытался добавить сертификаты в список доверенных сертификатов, выполнив следующие действия:
- Copy мой .pem файл в/и т.д./PKI/CA-доверительном/источника/якоря
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 -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]
.
Я удалил версию python для Windows и переустановил версию 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 Название переменной, чтобы указать на/и т.д./ИПК/ча-trust- извлеченный/PEM и установите SSL_CERT_FILE в /etc/pki/ca-trust-extracted/pem/tls-ca-bundle.pem, но они не работают:
$ 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 vs Windows? Какие файлы PEM необходимо обновить?
Какие пип версии? –
Я использую pip 8.1.2. 'pip 8.1.2 из/usr/lib/python2.7/site-packages/pip-8.1.2-py2.7.egg' –
@KlausD. Я обновил свой вопрос, указав, что с тех пор я удалил Windows Python и установил его только через cygwin, но безрезультатно. –