Установка сертификата Zscaler в Anaconda3
После обязательной установки Zscaler через Компанию моя Anaconda начала выдавать мне ошибку проверки SSL при установке модулей и использовании запросов для получения URL-адресов.
Ошибка (SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] проверка сертификата не удалась: невозможно получить сертификат локального эмитента (_ssl.c:1076)'))': /simple /' some_module '/
SSLError: HTTPSConnectionPool(host='www.amazon.com', port=443): Превышено максимальное количество повторных попыток с URL: / (Вызвано SSLError(SSLError("плохое рукопожатие: Ошибка ([('SSL-подпрограммы', 'tls_process_server_certificate', 'проверка сертификата не удалась')])")))
При выключенном Zscaler все работает отлично, но политика компании этого не допускает...
Я нашел некоторые обходные пути, такие как установка verify на False, но это не то, что я хочу.
Я хочу установить сертификат Zscaler (который мне предоставил наш ИТ-отдел) в Anaconda
Теперь проблема, похоже, в том, что он использует общие сертификаты conda.
import ssl
print(ssl.get_default_verify_paths())
Выходные данные: DefaultVerifyPaths(cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='C:\ci\openssl_1581353098519\_h_env\Library/cert.pem', openssl_capath_env='capath_env =', openssl_capath_env \openssl_1581353098519\_h_env\Library/certs')
Любая идея, что я могу сделать, чтобы указать conda на сертификат Zscaler, который у меня есть?
системная информация: Windows 10, Anaconda3 -2020.02, Python 3.7
Заранее большое спасибо
3 ответа
Что вы можете сделать:
- Откройте браузер и перейдите на http://www.google.com/.
- Рядом с кнопкой перезагрузки страницы вы увидите замок (см. Рисунок ниже). нажмите здесь
- Нажмите: Сертификат
- Щелкните вкладку: Путь сертификации
- Выберите Zsclaer Root CA5 и нажмите кнопку View Certificat.
- Щелкните вкладку: Сведения, а затем нажмите кнопку Копировать в файл.
- Экспортируйте сертификат, выбрав X.509 (.CER) в кодировке base-64
- Выберите путь, по которому сохранить файл
- Открыть подсказку Anaconda
- conda config -set ssl_verify path_of_the_file_that_you_just_saved
фон
У меня была такая же проблема, но я столкнулся с похожей проблемой на своем рабочем ноутбуке, за исключением того, что Zscaler заблокировал мой трафик curl, git и anaconda. Временное исправление заключалось в отключении проверки SSL, но это приводит к ряду уязвимостей безопасности, таких как атаки «человек посередине».
Из того, что я смог собрать, и моих ограниченных исследований, WSL2 не имеет автоматического способа импорта сертификатов ssl из системы. https://github.com/microsoft/WSL/issues/5134
Решение
Долгосрочное решение — получить сертификат Zscaler и добавить его в файл оболочки. Выполните следующие команды в WSL после получения сертификата и перехода в каталог.
echo "export SSL_CERT_FILE=<Path to Certificate>/ZscalerRootCA.pem" >> $HOME/.bashrc
который я получил от https://help.zscaler.com/zia/adding-custom-certificate-application-specific-trusted-store#curl-SSL_CERT_FILE У них есть больше команд для других приложений
Если вы используете какие-либо другие оболочки, обязательно измените
.bashrc
в каталог конфигурации этого файла. В моем случае я использую рыбу, поэтому я заменил
$HOME/.bashrc
с
$HOME/.config/fish/config.fish
echo "export SSL_CERT_FILE=<Path to Certificate>/ZscalerRootCA.pem" >> $HOME/.config/fish/config.fish
После добавления сертификата обязательно перезагрузите оболочку. В моем случае я запускал по инструкции от jeffmcneil.
source ~/.config/fish/config.fish
для bash вы хотели бы запустить
source ~/.bashrc
или же
. ~/.bashrc
Решение для ОС Windows
После того, как ваш корневой сертификат Zscaler установлен в корневом хранилище доверия Windows, просто установите pip-system-certs преемник python-certifi-win32 , который больше не поддерживается. Оба пакета доступны либо в pypi, либо в conda-forge, поэтому используйте либоpip
,conda
, илиmamba
для установки pip-system-certs в каждую среду Python, в которой вы используете пакет Requests. Пакет pip-system-certs исправляет сертификаты во время выполнения, чтобы использовать доверенное корневое хранилище Windows. Это решает проблему с пакетом запросов, не прибегая к настройке и/или редактированию ваших файлов.
Решение для Убунту
Скопируйте файл корневого сертификата Zscaler, он должен быть.crt
заканчиваться и быть в формате PEM, чтобы/usr/local/share/ca-certificates
и использоватьsudo update-ca-certificates
обновить свой/etc/ssl/certs/ca-certificates.crt
файл. Однако даже тогда,pip-system-certs
не совсем работает, поэтому добавьтеexport $REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
на ваш.profile
и перезапустите вашу оболочку.
Для получения дополнительной информации прочитайте следующее:
- В запросах используется пакет сертификатов ЦС certifi.
- Certifi, «тщательно подобранный» пакет сертификатов CA.
- установить сертификат CA в доверенном корневом хранилище Ubuntu
- Справка Zscaler, добавление пользовательских корневых хранилищ сертификатов
- установка пользовательских корневых хранилищ
ВНИМАНИЕ: я не рекомендую редактировать какие-либо файлы Python. Обратите внимание, что все они связаны, поэтому редактирование одного редактирует все, и ваш решатель mamba/conda может жаловаться, что ваш кеш пакета недействителен, потому что размер файла изменился из-за ваших правок. Посмотрите в каждой папке сред, включая базовую среду, и в базовой среде
pkgs/ca-certificates-<date>
файлы. В ОС Windows находится в
Library\ssl
вместо . Наконец
cacert.pem
файл будет перезаписан, если/когда вы установите или обновите пакет сертификатов Python, поэтому его редактирование на самом деле не идеальное решение. Лучшей альтернативой было бы поместить корневой сертификат Zscaler в новый
ssl/
папку в вашем домашнем каталоге и установите
$REQUESTS_CA_BUNDLE
в это место. Если ваша компания использует Zscaler, то я думаю, что это единственный корневой сертификат, который вам нужен.