Проверка сертификата Python SSL завершается неудачно в некоторых командах распространения
Я пытаюсь загрузить файл Python в PyPi через twine upload <file>
но я получаю ошибку SSL:
C:\pypubsub>twine upload dist\PyPubSub-4.0.0rc1-py3-none-any.whl
Uploading distributions to https://upload.pypi.org/legacy/
Uploading PyPubSub-4.0.0rc1-py3-none-any.whl
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)
Другие скрипты Python, использующие SSL, имеют такую же проблему, например
- с
python setup.py bdist_wheel upload <my_package>
- с
pip install <any_package>
; но там я могу добавить--trusted-host pypi.python.org
любомуpip install
Команда и установка и загрузка зависимостей будут успешными
Это происходит на моем корпоративном ноутбуке, будь то дома или на работе, но не на моем личном ноутбуке.
Чтобы обойти это, я в основном пытался ответить SO на аналогичную проблему (то есть экспортировать сертификат, который пытается проверить шпагат - предположительно, на pypi.python.org - и затем сказать шпагу использовать его):
- из chrome я перешел на https://pypi.pythong.org/, щелкнул замок рядом с URL-адресом, затем "Детали", "Просмотр сертификата", "Сведения", "Копировать в файл". Это сгенерировало файл.CER.
- Я использовал SSL Converter для преобразования файла.CER из формата DER в формат PEM. Это создало файл.CRT.
- Я побежал как
twine upload <my_package> --cert <path to CRT file>
; на этот раз ошибка SSL былаSSLError: [SSL] PEM lib (_ssl.c:2846)
,
Затем я попытался отказаться от проверки сертификата сервера путем исправления c:\Python35\lib\ssl.py
как описано в Отключении: я заменил линию _create_default_https_context = create_default_context
от _create_default_https_context = _create_unverified_context
, Повторный запуск twine
Снова произошла ошибка команды с исходной ошибкой CERTIFICATE_VERIFY_FAILED.
Я не очень хорошо знаком с сертификатами, так что теперь я в растерянности, что еще можно попробовать.
1 ответ
Вы можете передать --cert
флаг, чтобы сказать twine
какой сертификат использовать.
twine upload dist\PyPubSub-4.0.0rc1-py3-none-any.whl --cert <path-to-.pem-file>
Чтобы скрыть .cer
к .pem
файл, сделайте следующее.
openssl x509 -inform der -in certificate.cer -out certificate.pem
--cert
Флаг имеет важное значение для тех, кто использует пользовательские сертификаты SSL. Если вы используете корпоративную сеть, вышеприведенное исправление должно помочь вам. Спросите своего администратора для SSL-сертификатов:)