У меня есть то, что я считаю нишевым сценарием. У меня есть сервер 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 раз, прежде чем признать, что все в порядке.