Самопідписані органи сертифікації pip
/conda
Після детального документування подібної проблеми з Git ( Як я можу змусити git прийняти самопідписаний сертифікат? ), Ось ми знову за корпоративним брандмауером із проксі-сервером, який дає нам атаку MitM, якій слід довіряти, та:
НІКОЛИ не відключайте всі перевірки SSL!
Це створює погану культуру безпеки. Не будь такою людиною.
tl; д-р
pip config set global.cert path/to/ca-bundle.crt
pip config list
conda config --set ssl_verify path/to/ca-bundle.crt
conda config --show ssl_verify
git config --global http.sslVerify true
git config --global http.sslCAInfo path/to/ca-bundle.crt
Але де ми беремо ca-bundle.crt
?
Отримайте сучасний комплект CA
cURL публікує витяг Центру сертифікації, що входить до складу Mozilla Firefox
https://curl.haxx.se/docs/caextract.html
Я рекомендую вам відкрити цей cacert.pem
файл у текстовому редакторі, оскільки нам потрібно буде додати наш самопідписаний ЦС до цього файлу.
Сертифікати - це документ, що відповідає стандарту X.509, але їх можна закодувати на диск кількома способами. Стаття нижче добре читається, але коротка версія полягає в тому, що ми маємо справу з кодуванням base64, яке в розширеннях файлів часто називають PEM. Ви побачите, що він має формат:
----BEGIN CERTIFICATE----
....
base64 encoded binary data
....
----END CERTIFICATE----
https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them
Отримання нашого самопідписаного сертифіката
Нижче наведено кілька варіантів того, як отримати наш самопідписаний сертифікат:
- Через OpenSSL CLI
- Через браузер
- Через сценарії Python
Отримайте наш самопідписаний сертифікат від OpenSSL CLI
/unix/451207/how-to-trust-self-signed-certificate-in-curl-command-line/468360#468360
echo quit | openssl s_client -showcerts -servername "curl.haxx.se" -connect curl.haxx.se:443 > cacert.pem
Отримайте наш самопідписаний орган сертифікації через браузер
Завдяки цій відповіді та пов’язаному блогу він показує кроки (у Windows), як переглянути сертифікат, а потім скопіювати у файл, використовуючи опцію кодування PEM base64.
Скопіюйте вміст цього експортованого файлу та вставте його в кінець cacerts.pem
файлу.
Для послідовності перейменуйте цей файл cacerts.pem
-> ca-bundle.crt
і розмістіть його десь легко, наприклад:
%USERPROFILE%\certs\ca-bundle.crt
$HOME/certs/cabundle.crt
Отримайте наш самопідписаний центр сертифікації через Python
Дякую за всі блискучі відповіді у:
Як отримати відповідь SSL-сертифікат із запитів у python?
Я зібрав наступне, щоб спробувати зробити крок далі.
https://github.com/neozenith/get-ca-py
Нарешті
Встановіть конфігурацію в pip і conda, щоб вона знала, де знаходиться цей магазин ЦС, з нашим додатковим самопідписаним ЦС.
pip config set global.cert %USERPROFILE%\certs\ca-bundle.crt
conda config --set ssl_verify %USERPROFILE%\certs\ca-bundle.crt
АБО
pip config set global.cert $HOME/certs/ca-bundle.crt
conda config --set ssl_verify $HOME/certs/ca-bundle.crt
ТОДІ
pip config list
conda config --show ssl_verify
pip config list -v
For variant 'global', will try loading '/Library/Application Support/pip/pip.conf'
For variant 'user', will try loading '/Users/jpeak/.pip/pip.conf'
For variant 'user', will try loading '/Users/jpeak/.config/pip/pip.conf'
For variant 'site', will try loading '/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/pip.conf'
Список літератури