descargar - ¿Cómo hacer que Python use certificados de CA de Mac OS TrustStore?
install python 2.7 mac (4)
Como actualización y punto de datos, me encontré con este problema al ejecutar Python 3.7.0 en macOS 10.13.4:
$ ipython
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 26 2018, 23:26:24)
Type ''copyright'', ''credits'' or ''license'' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type ''?'' for help.
In [1]: import bokeh.sampledata
In [2]: bokeh.sampledata.download()
Using data directory: /Users/me/.bokeh/data
...
SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)
Las instrucciones para resolver el problema se encuentran en /Applications/Python/ 3.7/ReadMe.rtf
Siguiendo la sugerencia y ejecutando /Applications/Python/ 3.7/Install/ Certificates.command
solucionó el problema:
Desde la terminal:
$ /Applications/Python/ 3.7/Install/ Certificates.command
Reiniciando IPython ...
$ ipython
>>> import bokeh.sampledata
>>> bokeh.sampledata.download()
Using data directory: /Users/me/.bokeh/data
Downloading: CGM.csv (1589982 bytes)
1589982 [100.00%]
...
Necesito usar certificados raíz de acceso directo en la intranet de la empresa y cargarlos en Mac OS TrustStore (KeyChain) resuelve el problema para todos los navegadores y aplicaciones GUI.
Parece que funciona incluso con la versión de curl
que se envía con Mac OS X, pero no funciona con python , incluso la versión que se envía con Mac OS 10.12 Sierra (Python 2.7.10)
Aún así, parece que sería golpeado por:
urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)>
¿Como puedo resolver esto?
Debido a que encuentro este problema en muchas y muchas herramientas de Python, realmente apreciaría si encontrara una manera de evitarlo sin tener que parchearlas.
Proporcionar el certificado de CA personalizado no es una opción porque no puedo parchar decenas de herramientas de Python que utilizo.
La mayoría de las herramientas están usando la biblioteca de requests
, pero hay algunas que están usando el soporte nativo de SSL en Python directamente.
Esto también es un problema en Python 3.6 con MacOS Sierrra. Sé que su caso de uso es diferente. Pero me topé con este hilo al investigar este problema. Así que si alguien también tiene este artículo, vale la pena echarle un vistazo:
http://www.cdotson.com/2017/01/sslerror-with-python-3-6-x-on-macos-sierra/
En pocas palabras : Python 3.6 ya no se basa en openSSL de MacOS. Viene con su propio paquete openSSL y no tiene acceso a los certificados raíz de MacOS.
Tienes dos opciones:
Ejecuta un comando de instalación incluido con Python 3.6
cd /Applications/Python/ 3.6/
./Install/ Certificates.command
o
Instala el paquete certifi
Escogí la primera opción y funcionó.
Para mí /Applications/Python/ 3.6/./Install/ Certificates
comando /Applications/Python/ 3.6/./Install/ Certificates
falla en la instalación de certifi de pip. Estoy en mac High Sierra y uso python3, así que pip falla un poco y tengo que usar pip3 en su lugar.
Así que aquí lo que hice:
-
pip3 install --update certify
manualmente lapip3 install --update certify
en un shell - Elimine la línea certifi de instalación del script de comando
- Reran el guión y todo estuvo bien.
Tenga en cuenta que terminará con un enlace simbólico cert.pem en: /Library/Frameworks/Python.framework/Versions/3.6/etc/openssl/
Si coloca los certificados adicionales en un archivo de paquete PEM, puede usar estas dos variables de entorno para sobrescribir los almacenes de certificados predeterminados utilizados por Python openssl y solicitudes.
SSL_CERT_FILE=/System/Library/OpenSSL/cert.pem
REQUESTS_CA_BUNDLE=/System/Library/OpenSSL/cert.pem
Tenga en cuenta que este archivo no existe, debe crearlo usted mismo.