Autoridades de certificación autofirmadas pip
/conda
Después de documentar extensamente un problema similar con Git ( ¿Cómo puedo hacer que git acepte un certificado autofirmado? ), Aquí estamos nuevamente detrás de un firewall corporativo con un proxy que nos da un "ataque" MitM en el que debemos confiar y:
¡NUNCA desactive todas las verificaciones SSL!
Esto crea una mala cultura de seguridad. No seas esa persona.
tl; dr
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
¿Pero de dónde sacamos ca-bundle.crt
?
Obtenga un paquete CA actualizado
cURL publica un extracto de las autoridades de certificación incluidas con Mozilla Firefox
https://curl.haxx.se/docs/caextract.html
Le recomiendo que abra este cacert.pem
archivo en un editor de texto, ya que necesitaremos agregar nuestra CA autofirmada a este archivo.
Los certificados son un documento que cumple con X.509, pero se pueden codificar en disco de varias formas. El artículo a continuación es una buena lectura, pero la versión corta es que estamos tratando con la codificación base64 que a menudo se llama PEM en las extensiones de archivo. Verás que tiene el formato:
----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
Obtener nuestro certificado autofirmado
A continuación, se muestran algunas opciones sobre cómo obtener nuestro certificado autofirmado:
- A través de OpenSSL CLI
- A través del navegador
- A través de secuencias de comandos de Python
Obtenga nuestro certificado autofirmado por 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
Obtenga nuestra autoridad de certificación autofirmada a través del navegador
Gracias a esta respuesta y al blog vinculado, muestra los pasos (en Windows) de cómo ver el certificado y luego copiarlo al archivo usando la opción de codificación base64 PEM.
Copie el contenido de este archivo exportado y péguelo al final de su cacerts.pem
archivo.
Para mayor coherencia, cambie el nombre de este archivo cacerts.pem
-> ca-bundle.crt
y colóquelo en un lugar fácil como:
%USERPROFILE%\certs\ca-bundle.crt
$HOME/certs/cabundle.crt
Obtenga nuestra autoridad certificadora autofirmada a través de Python
Gracias a todas las brillantes respuestas en:
¿Cómo obtener un certificado SSL de respuesta de solicitudes en Python?
He reunido lo siguiente para intentar dar un paso más.
https://github.com/neozenith/get-ca-py
Finalmente
Establezca la configuración en pip y conda para que sepa dónde reside esta tienda CA con nuestra CA autofirmada adicional.
pip config set global.cert %USERPROFILE%\certs\ca-bundle.crt
conda config --set ssl_verify %USERPROFILE%\certs\ca-bundle.crt
O
pip config set global.cert $HOME/certs/ca-bundle.crt
conda config --set ssl_verify $HOME/certs/ca-bundle.crt
ENTONCES
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'
Referencias