python easy_install завершается с ошибкой SSL-сертификата для всех пакетов

Цель: я использую RedHat 5 и пытаюсь установить последние версии python и django для веб-приложения.

Я успешно установил python27 и easy_install, а также wget с openssl.

Проблема: Однако теперь, когда я пытаюсь получить что-либо с pypi.python.org, я получаю следующую ошибку:

$ sudo easy_install --verbose django
Searching for django
Reading https://pypi.python.org/simple/django/
Download error on https://pypi.python.org/simple/django/: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed -- Some packages may not be found!
Couldn't find index page for 'django' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading https://pypi.python.org/simple/
Download error on https://pypi.python.org/simple/: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed -- Some packages may not be found!
No local packages or download links found for django
error: Could not find suitable distribution for Requirement.parse('django')

Я попытался найти сертификат pypi.python.org с помощью openssl s_client -showcert -connect, но не знаю, что с ним делать и где его хранить. В гугле мало информации, нужна помощь специалиста.

Благодарю вас!

редактировать: я имел в виду wget* с openssl.

$ wget http://ftp.gnu.org/gnu/wget/wget-1.15.tar.gz
$ tar -xzf wget-1.15.tar.gz
$ cd wget-1.15
$ ./configure --with-ssl=openssl
$ make
$ sudo make install

Я также не могу заставить wget вытащить страницу:

$ wget https://pypi.python.org/simple/django/
--2014-01-21 11:18:45--  https://pypi.python.org/simple/django/
Resolving pypi.python.org (pypi.python.org)... 199.27.73.185, 199.27.74.184
Connecting to pypi.python.org (pypi.python.org)|199.27.73.185|:443... connected.
ERROR: cannot verify pypi.python.org's certificate, issued by ‘/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance CA-3’:
  Unable to locally verify the issuer's authority.
To connect to pypi.python.org insecurely, use `--no-check-certificate'.

person dlite922    schedule 21.01.2014    source источник
comment
Запустите эту команду, похоже, ваши сертификаты ЦС не обновлены: curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt, а затем повторите попытку.   -  person Burhan Khalid    schedule 18.03.2014
comment
@BurhanKhalid В точку... спасибо за это. Вы должны представить это как ответ, вероятно, это борьба всех...   -  person Luke Chavers    schedule 19.12.2014


Ответы (4)


ваш сертификат curl устарел, попробуйте загрузить новый сертификат curl:

sudo wget http://curl.haxx.se/ca/cacert.pem -O /etc/pki/tls/certs/ca-bundle.crt
person eleforest    schedule 09.06.2015
comment
Стоит отметить, что, согласно одному из других сообщений, каталог /etc/pki/tls/certs не обязательно должен существовать заранее, поскольку это жестко запрограммированное местоположение, которое будет искать setuptools. - person Kaleb Pederson; 17.12.2015
comment
Сначала выполните mkdir -p /etc/pki/tls/certs, если /etc/pki/tls/certs не существует. - person Helin Wang; 19.01.2018

Я нашел эту страницу после поиска решения этой проблемы. Если у кого-то еще есть аналогичная проблема, я нашел решение:

В начале файла setuptools/ssl_support.py (который используется easy_install и находится внутри файла egg: ./lib/python2.7/site-packages/setuptools-3.5.1-py2.7.egg) файлы пакетов сертификатов жестко закодированы в переменной cert_paths:

cert_paths = """
/etc/pki/tls/certs/ca-bundle.crt
/etc/ssl/certs/ca-certificates.crt
/usr/share/ssl/certs/ca-bundle.crt
/usr/local/share/certs/ca-root.crt
...etc..
"""

easy_install будет использовать первый существующий файл из этого списка, так как он вызывает find_ca_bundle. Если сертификаты в этом файле пакета сертификатов устарели, то easy_install завершится ошибкой SSL. Поэтому необходимо либо обновить файл сертификата, либо изменить cert_paths в этом файле ssl_support.py, чтобы указать на локальный обновленный файл пакета сертификатов.

person Stephen Bridgett    schedule 01.06.2014

Я видел эту проблему в определенной среде: Mac OS X с macports, установка пакетов по локальному пути пользователя. Решение состояло в том, чтобы установить сертификаты из curl:

port install curl-ca-bundle

Кстати, пока у вас нет сертификатов, большинство команд port, easy_install и pip не будут выполняться из-за ошибки ssl.

person deeenes    schedule 04.06.2015

Попробуйте установить pip вместо установки пакета python.

Вы можете найти документацию по быстрой установке и использованию здесь. Обычно это намного лучше, чем easy_install.

Он также использует SSL по умолчанию и со стеком сертификатов Requests (полученным от Mozilla).

Вы также можете найти много информации о работе с пакетами Python в целом на Python. Руководство пользователя упаковки.

person Ivo    schedule 21.01.2014
comment
Это круговой совет. Сайты pip подсказывают мне установить ez_setup.py, который является easy_install. Мне нужно решить эту ошибку сертификата. Кажется, это чревато не только этим. - person dlite922; 21.01.2014
comment
Привет, загрузочный файл get-pip.py больше не должен требовать ez_setup.py :) Он установит для вас как pip, так и setuptools. Конкретная причина, по которой я предлагаю pip, заключается в том, что он должен иметь собственный стек сертификатов CA для проверки соединения. - person Ivo; 24.01.2014
comment
я могу загрузить get-pip.py без сертификата проверки, но как только я его запускаю, он выдает ошибки сертификата при попытке установить setuptools и pip. - person dlite922; 29.01.2014
comment
Теперь я думаю, что причина, по которой wget не может безопасно подключиться к pypi, также может быть причиной того, что все остальное (например, pip и easy_install) тоже не может. Конечно, сертификат PyPI отлично работает для многих других устройств, которые я использую через SSL/TLS. Вы пробовали использовать последнюю сборку OpenSSL? Я подозреваю, что RedHat 5 устаревает. - person Ivo; 29.01.2014
comment
Да, возможно, старый openssl, я переместил хосты на debian wheezy, и все отлично установилось с первого раза. Дебаин 1, РедХат 0 - person dlite922; 29.01.2014
comment
@Иво, это сработало для меня. Все мои операторы wget требовали --no-check-certificate для работы, но последующие команды установки pip для пакетов, которые находятся за https, работали нормально. - person shadanan; 18.03.2014
comment
В некоторых ситуациях вы должны использовать easy_install. pip великолепен, но это не решение этой проблемы. - person Anthony Roberts; 18.02.2019