Как игнорировать предупреждения безопасности, выдаваемые при установке pip на частный сервер pypi с использованием самозаверяющего сертификата - PullRequest
1 голос
/ 22 мая 2019

У меня есть то, что я считаю нишевым сценарием. У меня есть сервер Pypi, работающий на сервере Linux. Извлечение пакетов из него с помощью:

pip install --extra-index-url http://<IP>:8080 MyPackage

Работает, как и следовало ожидать, при загрузке пакета из частного репозитория.

Однако, поскольку я ввел в уравнение самозаверяющий сертификат (у меня нет домена для этого IP), используя следующую команду:

pip install --cert apache-selfsigned.crt --extra-index-url https://UN:PW@<IP>:443 MyPackage

Я получаю следующие ошибки (хотя все равно работает, как вы можете видеть внизу):


Collecting MyPackage
  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727)'),)': /simple/MyPackage/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727)'),)': /simple/MyPackage/
  Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727)'),)': /simple/MyPackage/
  Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727)'),)': /simple/MyPackage/
  Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727)'),)': /simple/MyPackage/
/usr/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl/urllib3/connectionpool.py:860: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
Installing collected packages: MyPackage
Successfully installed MyPackage-0.2.0

Я использую Apache2 в качестве обратного прокси-сервера для переадресации порта 443 на порт pypi.

Сертификат действителен, но явно не зарегистрирован в ЦС. Он отлично работает для шифрования и для подключения через веб-браузер (как только я принимаю «риски»). Итак, я знаю, что сертификат / ключ работают правильно.

Кажется, что pip попытается 5 раз потерпеть неудачу, прежде чем принять решение о проверке непроверенного сертификата. Что-то не так в сертификате? Или это просто то, что зависимостям pip не нравятся самозаверяющие сертификаты, и они всегда будут терпеть неудачу 5 раз, прежде чем признать, что все в порядке.

1 Ответ

2 голосов
/ 22 мая 2019

При использовании --extra-index-url, pip все равно будет использовать PyPI вместе с вашим дополнительным индексом при поиске пакета. К сожалению, нет никакого способа указать «экстраиндексный сертификат», поэтому при передаче --cert pip будет использовать сертификат для всех индексных хостов, включая pypi.org. Вот почему вы получаете certificate verify failed ошибки. Чтобы обойти это, вы можете:

  • Установите всю систему сертификатов, чтобы вам вообще не приходилось передавать --cert. Точные шаги зависят от ОС, также вам понадобятся дополнительные шаги для виртуальных сред.
  • Используйте --index-url=<IP> --cert=my.crt - имейте в виду, что в этом случае pip вообще не будет запрашивать PyPI, поэтому вы сможете устанавливать только пакеты, предлагаемые вашим собственным индексом. Приличные серверы индексирования, такие как devpi, могут выступать в качестве прокси-сервера для PyPI, но это не такая большая проблема.
  • Доверяйте хостам PyPI: --extra-index-url=<IP> --cert=my.cert --trusted-host=pypi.org --trusted-host=files.pythonhosted.org - это пропустит проверку хостов PyPI, поэтому небезопасно и должно быть только временным решением проблемы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...