Ошибка получения самозаверяющего сертификата при установке pip в пределах Docker, но только для определенных пакетов - PullRequest
0 голосов
/ 09 января 2020

Я просто играю с простым примером, чтобы получить базовое c понимание Docker. Вот мой Docker файл изображения:

FROM python:3.7-alpine

# copy all the files to the container
COPY . /test
WORKDIR /test

# install dependencies
RUN pip install pip_system_certs --trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host pypi.python.org
RUN pip install -r requirements.txt



# run the command
CMD ["python", "./test_script.py"]

Параметры доверенного хоста - это то, что позволяет нам обойти настройки безопасности корпоративной сети и установить пакеты внутри системы на windows, и они, кажется, работают в Docker тоже, но только для некоторых пакетов. Например, если мой файл require.txt содержит flask и запрашивает все в порядке, но pandas и numpy дают мне

ПРЕДУПРЕЖДЕНИЕ: повторная попытка (повторная попытка (всего = 4, подключение = нет, read = None, redirect = None, status = None)) после разрыва соединения по 'SSLError (SSLCertVerificationError (1,' [SSL: CERTIFICATE_VERIFY_FAILED] сертификат не прошел проверку: самозаверяющий сертификат в цепочке сертификатов (_ssl. c: 1076) ' )) ': / simple / numpy /

и завершается ошибкой. Я думаю, что это странно, что это работает для некоторых пакетов, но не для других.

Любая помощь приветствуется.

Использование Docker рабочего стола в Windows 10.

1 Ответ

0 голосов
/ 10 января 2020

Я знаю, что крупный корпоративный прокси-сервер моей компании удаляет (большинство) обычных сертификатов и повторно упаковывает их в самозаверяющий сертификат. Это вызвало много подобных головных болей для меня. Я решил это следующим образом:

  • Чтобы выяснить, каким был наш root сертификат, посетите сайт inte rnet в Chrome, нажмите на замок в адресной строке и просмотрите путь сертификации. за сертификат сайта. root CA был нашим внутренним.
  • Переходя к управлению сертификатами на панели управления Windows и в разделе «Доверенные Root Сертификация» обнаружил внутренний сертификат root моей компании и экспортировал его как « Файл X.509 в кодировке Base-64.
  • Скопировал этот файл сертификата в мой контейнер Docker и добавил его в качестве сертификата CA в «os» внутри моего контейнера. После этого все, что я запускал в своем контейнере, просто работало.

Подвох с шагом 3 заключается в том, что именно то, как вы это делаете, отличается для разных вариантов linux. Я не очень разбираюсь в альпийском, но эти ссылки могут указывать вам примерно в правильном направлении: https://blog.confirm.ch/adding-a-new-trusted-certificate-authority/
https://github.com/gliderlabs/docker-alpine/issues/260

Также , бонусный улов - если вы используете библиотеку запросов python в своем приложении, по умолчанию она не использует системные сертификаты CA. Если это проблема для вас, читайте о настройке REQUESTS_CA_BUNDLE в принятом ответе здесь: Python Запросы - Как использовать системные сертификаты ca (debian / ubuntu)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...