Error urllib y "SSL: CERTIFICATE_VERIFY_FAILED"

279

Estoy teniendo el siguiente error:

Exception in thread Thread-3:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in        __bootstrap_inner
self.run()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 763, in  run
self.__target(*self.__args, **self.__kwargs)
File "/Users/Matthew/Desktop/Skypebot 2.0/bot.py", line 271, in process
info = urllib2.urlopen(req).read()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1240, in https_open
context=self._context)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)>

Este es el código que está causando este error:

if input.startswith("!web"):
    input = input.replace("!web ", "")      
    url = "https://domainsearch.p.mashape.com/index.php?name=" + input
    req = urllib2.Request(url, headers={ 'X-Mashape-Key': 'XXXXXXXXXXXXXXXXXXXX' })
    info = urllib2.urlopen(req).read()
    Message.Chat.SendMessage ("" + info)

La API que estoy usando requiere que use HTTPS. ¿Cómo puedo hacer que omita la verificación?

usuario3724476
fuente
2
La URL no tiene nada de malo y se puede verificar con éxito con los certificados de confianza comunes. Por lo tanto, es mejor que no intentes evitar la validación del certificado, sino arreglarlo. ¿Qué versión de Python estás usando?
Steffen Ullrich
Esto podría estar relacionado con stackoverflow.com/a/27826829/3081018 . El servidor utiliza el mismo tipo de cadena de certificados con múltiples rutas de confianza. Vea allí qué café puede necesitar usar para la verificación.
Steffen Ullrich
77
Este error también ocurre en Python 3.5 después de actualizar a yosemite
pyCthon
2
Esto explica la situación. access.redhat.com/articles/2039753
Charlie Burns
44
"¿Cómo puedo hacer que omita la verificación?" Es la pregunta equivocada. Probablemente debería preguntar cómo validar el certificado proporcionado por el dominio.
jww

Respuestas:

297

Si tu solo desea omitir la verificación, puede crear un nuevo SSLContext . Por defecto, los contextos recién creados usan CERT_NONE .

Tenga cuidado con esto como se indica en la sección 17.3.7.2.1

Al llamar al constructor SSLContext directamente, CERT_NONE es el valor predeterminado. Dado que no autentica al otro par, puede ser inseguro, especialmente en modo cliente, donde la mayoría de las veces le gustaría garantizar la autenticidad del servidor con el que está hablando. Por lo tanto, cuando está en modo cliente, se recomienda usar CERT_REQUIRED.

Pero si solo quiere que funcione ahora por alguna otra razón, puede hacer lo siguiente, tendrá que import ssl :

input = input.replace("!web ", "")      
url = "https://domainsearch.p.mashape.com/index.php?name=" + input
req = urllib2.Request(url, headers={ 'X-Mashape-Key': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' })
gcontext = ssl.SSLContext()  # Only for gangstars
info = urllib2.urlopen(req, context=gcontext).read()
Message.Chat.SendMessage ("" + info)

Esto debería solucionar su problema, pero en realidad no está resolviendo ninguno de los problemas, ¡pero no lo verá [SSL: CERTIFICATE_VERIFY_FAILED]porque ahora no está verificando el certificado!

Para agregar a lo anterior, si desea saber más acerca de por qué está viendo estos problemas, querrá echar un vistazo a PEP 476 .

Este PEP propone habilitar la verificación de las firmas del certificado X509, así como la verificación del nombre de host para los clientes HTTP de Python de forma predeterminada, sujeto a la exclusión voluntaria por llamada. Este cambio se aplicaría a Python 2.7, Python 3.4 y Python 3.5.

Hay una opción de exclusión voluntaria que no es diferente a mi consejo anterior:

import ssl

# This restores the same behavior as before.
context = ssl._create_unverified_context()
urllib.urlopen("https://no-valid-cert", context=context)

También presenta una opción altamente desaconsejada a través de monkeypatching que no se ve a menudo en python:

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

Que anula la función predeterminada para la creación de contexto con la función para crear un contexto no verificado.

Tenga en cuenta con esto como se indica en el PEP:

Esta guía está dirigida principalmente a los administradores de sistemas que desean adoptar versiones más recientes de Python que implementen esta PEP en entornos heredados que aún no admiten la verificación de certificados en conexiones HTTPS. Por ejemplo, un administrador puede optar por no agregar el parche de mono anterior a sitecustomize.py en su entorno operativo estándar para Python. Las aplicaciones y las bibliotecas NO DEBEN estar ampliando este proceso de cambio (excepto tal vez en respuesta a una configuración de configuración controlada por el administrador del sistema).

Si desea leer un documento sobre por qué no validar los certificados es malo en el software, ¡puede encontrarlo aquí !

Noelkd
fuente
1
Entonces, si este error me impide usar, setup.py upload¿cómo puedo solucionarlo?
pyCthon
55
ssl._create_default_https_context = ssl._create_unverified_context esto funcionó para mí como lo mencionó Noelkd casi al final. Como el nuestro es un sitio de intranet para impresoras HP ... puramente utilizado para el raspado ... no tenemos ningún problema con el uso de este método.
ihightower
Su primer método es el menos deseable: omitir la validación. ¿Por qué el que realmente valida el certificado no aparece primero?
jww
1
Esto también puede suceder si tiene una versión desactualizada de openSSL. Entonces, para mí, lo que funcionó fue actualizar a la versión más reciente certifi y actualizar openssl en las cajas.
myusuf3
1
context es lo que necesitaba
prayagupd
382

Esta no es una solución a su problema específico, pero lo pongo aquí porque este hilo es el principal resultado de Google para "SSL: CERTIFICATE_VERIFY_FAILED", y me llevó a una loca búsqueda.

Si instaló Python 3.6 en OSX y obtiene el error "SSL: CERTIFICATE_VERIFY_FAILED" cuando intenta conectarse a un sitio https: //, probablemente sea porque Python 3.6 en OSX no tiene ningún certificado y no puede validar ningún SSL conexiones Este es un cambio para 3.6 en OSX, y requiere un paso posterior a la instalación, que instala el certifipaquete de certificados. Esto está documentado en el archivo Léame, que debe encontrar en/Applications/Python\ 3.6/ReadMe.rtf

ReadMe le pedirá que ejecute este script posterior a la instalación, que solo instala certifi:/Applications/Python\ 3.6/Install\ Certificates.command

Las notas de la versión tienen más información: https://www.python.org/downloads/release/python-360/

Craig Glennie
fuente
105
Ejecute directamente / Aplicaciones / Python \ 3.6 / Instalar \ Certificados.com y resuelva mi problema en OSX. Gracias.
muyong
2
Estoy usando OS X El Capitan 10.11.6, Python 3.6.0 y esta solución funcionó perfectamente.
y2knoproblem
2
Estoy usando macOS Sierra 10.12.5, Python 3.6.1 y esta solución funcionó perfectamente.
James
44
¡Esto lo arregló para mí al /Applications/Python\ 3.7/Install\ Certificates.command ejecutar esto directamente terminal! Gracias @CraigGlennie y @muyong, agradezco que hayas out-of-the-box-thinkingcolocado esto aquí.
JayRizzo
66
Python 3.7 en macOS Mojave: no funciona aquí. Desinstalé / reinstalé / ejecuté el certificado de instalación, reinicié, etc. No funciona para mí
Thomas
71

Para ampliar la respuesta de Craig Glennie:

en Python 3.6.1 en MacOs Sierra

Ingresar esto en la terminal bash resolvió el problema:

pip install certifi
/Applications/Python\ 3.6/Install\ Certificates.command
jnPy
fuente
3
intente sudo /Applications/Python\ 3.6/Install\ Certificates.commandsi se deniegan los permisos.
KingKongCoder
De hecho, esto no soluciona el problema en Python 3.6. -1
hyperum
1
Si usar la línea de comando te asusta (probablemente no si estás aquí, pero bueno), también puedes encontrar la carpeta Aplicaciones (o equivalente en otros sistemas operativos) que Python creó en la instalación, luego abre el script haciendo doble clic. El nombre específico de la carpeta depende de la versión de Python que haya instalado.
Erdős-Bacon
Funcionó como un encanto para Python 3.7.3. Gracias.
klbytec
Gracias. Literalmente busqué cientos de soluciones y la suya funcionó.
NND
43

En Windows, Python no mira el certificado del sistema, usa el suyo ubicado en ?\lib\site-packages\certifi\cacert.pem.

La solución a tu problema:

  1. descargue el certificado de validación de dominio como archivo * .crt o * pem
  2. abra el archivo en el editor y copie su contenido al portapapeles
  3. encuentra tu cacert.pemubicación:from requests.utils import DEFAULT_CA_BUNDLE_PATH; print(DEFAULT_CA_BUNDLE_PATH)
  4. edite el cacert.pemarchivo y pegue su certificado de validación de dominio al final del archivo.
  5. ¡Guarde el archivo y disfrute de las solicitudes!
Bruno Gabuzomeu
fuente
66
lib\site-packages\certifi\cacert.pemno existe en Python 2.7.10. Y la pregunta es sobre urllib2norequests
Kevin Smyth
2
La mejor solución hasta ahora, la API de Twitter utiliza el certificado DigiCert que no está en el archivo cacert.pem de mi python. ¡Agregué allí y VOILA!
digz6666
2
Trabajó en Debian. Para los registros, la ruta del archivo en mi sistema fue: /usr/local/lib/python2.7/dist-packages/certifi-2015.09.06.2-py2.7.egg/certifi/cacert.pem. ¡Gracias!
ofavre
Lamentablemente, las solicitudes de Python no utilizan ningún almacén de confianza de CA de ningún sistema operativo. github.com/requests/requests/issues/2966 . Debe configurar REQUESTS_CA_BUNDLE github.com/bloomreach/s4cmd/issues/111#issuecomment-406839514 .
jamshid
Funciona en Windows 10, Python 3.6, con las API de Google y Twitter y el módulo de solicitudes en general.
brittenb
36

Mi solución para Mac OS X:

1) Actualice a Python 3.6.5 utilizando la aplicación nativa Instalador de Python descargado del sitio web oficial del lenguaje Python https://www.python.org/downloads/

Descubrí que este instalador se encarga de actualizar los enlaces y enlaces simbólicos para el nuevo Python mucho mejor que homebrew.

2) Instale un nuevo certificado usando "./Install Certificates.command" que se encuentra en el directorio actualizado de Python 3.6

> cd "/Applications/Python 3.6/"
> sudo "./Install Certificates.command"
Claude COULOMBE
fuente
Funcionó de maravilla en Mac OS X.
Manu mathew
31

Podría intentar agregar esto a sus variables de entorno:

PYTHONHTTPSVERIFY=0 

Tenga en cuenta que esto deshabilitará toda la verificación HTTP, por lo que es un poco un enfoque de mazo, sin embargo, si no se requiere verificación, puede ser una solución efectiva.

Chris Halcrow
fuente
17
Sospecho que deshabilitar toda la verificación HTTP para todo Python es un poco excesivo para lidiar con un error en la verificación. Hay muchos casos en los que uno podría desear la verificación por defecto.
trevorKirkby
Me funcionó en Windows Server 2016 en python 2.7.13. Normalmente no tengo Python instalado en los servidores de Windows, pero lo necesitaba para una actualización de vCenter con migración de Nexus 1000v a VDS, y esto solo soluciona el problema con un certificado vCenter autofirmado por el momento (usará VMCA y certificados válidos en entorno actualizado). No tuve suerte de que se aceptara el certificado editando el paquete de solicitud cacert.pem en python
Christopher Thorjussen
3
Además, configuré la variable directamente en la ventana de línea de comandos antes de ejecutar el script, por lo que no deshabilitaré todas las comprobaciones como @ alguien u otro tienen miedo, lo que yo tampoco recomendaría.
Christopher Thorjussen
Eso es perfecto para mi caso de uso: pruebas. Nunca haría esto en producción, pero para ejecutar pruebas que no tienen nada que ver con SSL, es una opción maravillosa.
sorin
Gracias, esta solución lo hizo por mí: import os os.environ ["PYTHONHTTPSVERIFY"] = "0"
mbello
28

Estaba teniendo un problema similar, aunque yo estaba usando urllib.request.urlopenen Python 3.4, 3.5, y 3.6 . (Esta es una parte del equivalente de Python 3 urllib2, según la nota al comienzo de la página de documentación de Python 2urllib2 ).

Mi solución fue pip install certifiinstalar certifi, que tiene:

... una colección cuidadosamente seleccionada de certificados raíz para validar la confiabilidad de los certificados SSL mientras se verifica la identidad de los hosts TLS.

Luego, en mi código donde anteriormente tenía:

import urllib.request as urlrq

resp = urlrq.urlopen('https://example.com/bar/baz.html')

Lo revisé a:

import urllib.request as urlrq
import certifi

resp = urlrq.urlopen('https://example.com/bar/baz.html', cafile=certifi.where())

Si leo la urllib2.urlopendocumentación correctamente, también tiene un cafileargumento. Por lo tanto, también urllib2.urlopen([...], certifi.where())podría funcionar para Python 2.7.


ACTUALIZACIÓN (2020-01-01): a partir de Python 3.6, el cafileargumento de urlopenha quedado en desuso , y se contextsupone que se debe especificar el argumento. Encontré lo siguiente para trabajar igualmente bien en 3.5 a 3.8:

import urllib.request as urlrq
import certifi
import ssl

resp = urlrq.urlopen('https://example.com/bar/baz.html', context=ssl.create_default_context(cafile=certifi.where()))
hBy2Py
fuente
1
load_verify_locationsmuta la SSLContextinstancia y vuelve None. Deberías usar context=ssl.create_default_context(cafile=certifi.where())en su lugar. Vea los ssldocumentos para más información.
Ostrokach
1
@ostrokach Huh, intenté algo así, pero debo haber usado la sslfunción incorrecta . Ver editar; ¿De acuerdo?
hBy2Py
13
import requests
requests.packages.urllib3.disable_warnings()

import ssl

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

Tomado de aquí https://gist.github.com/michaelrice/a6794a017e349fc65d01

Prostak
fuente
Probé esta solución en el entorno Jenkins, entorno personal, ¡esto funciona!
rapport89
2
Esto es extremadamente inseguro ya que omite TODAS las verificaciones de certificados, úselo bajo su propio riesgo y, por amor a NADIE, no lo use en el código de producción.
dragon788
Gracias. Finalmente funcionó. No es necesario que Python 3.6 esté instalado en / Aplicaciones en Mac OS. Esta debería ser la respuesta aceptada.
Biranchi
Nunca deberías hacer ese parche de mono. Es extremadamente peligroso y afectará todo el uso posterior del código.
Acumenus
10

Como he escrito en un comentario, este problema probablemente esté relacionado con esta respuesta SO .

En resumen: hay varias formas de verificar el certificado. La verificación utilizada por OpenSSL es incompatible con los certificados raíz de confianza que tiene en su sistema. OpenSSL es utilizado por Python.

Puede intentar obtener el certificado que falta para la Autoridad de certificación primaria pública de Verisign Clase 3 y luego usar la cafileopción de acuerdo con la documentación de Python :

urllib2.urlopen(req, cafile="verisign.pem")
Steffen Ullrich
fuente
¿Pueden ayudarme a resolver este problema relevante en python y ssl validation link
Ninguno
8

Tuve un problema similar en una de mis máquinas Linux. Generar nuevos certificados y exportar una variable de entorno que apunta al directorio de certificados lo arregló para mí:

$ sudo update-ca-certificates --fresh
$ export SSL_CERT_DIR=/etc/ssl/certs
ritiek
fuente
7

Necesito agregar otra respuesta porque, al igual que Craig Glennie, me puse loca por las muchas publicaciones que se refieren a este problema en la Web.

Estoy usando MacPorts, y lo que originalmente pensé que era un problema de Python era de hecho un problema de MacPorts: no instala un certificado raíz con su instalación de openssl. La solución es port install curl-ca-bundle, como se menciona en esta publicación de blog .

corwin.amber
fuente
5

He encontrado esto aquí

Encontré esta solución, inserte este código al comienzo de su archivo fuente:

import ssl

try:
   _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

Este código deshace la verificación para que no se verifique la certificación SSL.

Ganesh Chowdhary Sadanala
fuente
Ver este video me ayudó mucho a entender qué es SSL. URL del video: youtu.be/dsuVPxuU_hc
Ganesh Chowdhary Sadanala
4

Para Python 3.4+ en Centos 6/7 , Fedora , simplemente instale la CA confiable de esta manera:

  1. Copie el CA.crt a /etc/pki/ca-trust/source/anchors/
  2. update-ca-trust force-enable
  3. update-ca-trust extract
Cherif KAOUA
fuente
2
Puede ser una pregunta estúpida, pero ¿qué es CA.crt y dónde puedo encontrarlo?
Iqbal
4

Solución para Anaconda

Mi configuración es Anaconda Python 3.7 en MacOS con un proxy. Los caminos son diferentes.

  • Así es como se obtiene la ruta de certificados correcta :
import ssl
ssl.get_default_verify_paths()

que en mi sistema produjo

Out[35]: DefaultVerifyPaths(cafile='/miniconda3/ssl/cert.pem', capath=None,
 openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/miniconda3/ssl/cert.pem',
 openssl_capath_env='SSL_CERT_DIR', openssl_capath='/miniconda3/ssl/certs')

Una vez que sepa a dónde va el certificado, concatene el certificado utilizado por el proxy al final de ese archivo.

Ya había configurado conda para trabajar con mi proxy, ejecutando:

conda config --set ssl_verify <pathToYourFile>.crt

Si no recuerda dónde está su certificado, puede encontrarlo en ~/.condarc:

ssl_verify: <pathToYourFile>.crt

Ahora concatene ese archivo al final /miniconda3/ssl/cert.pem y las solicitudes deberían funcionar, y en particular sklearn.datasetsy herramientas similares deberían funcionar.

Advertencias adicionales

Las otras soluciones no funcionaron porque la configuración de Anaconda es ligeramente diferente:

  • El camino Applications/Python\ 3.Xsimplemente no existe.

  • La ruta proporcionada por los siguientes comandos es la ruta INCORRECTA

from requests.utils import DEFAULT_CA_BUNDLE_PATH
DEFAULT_CA_BUNDLE_PATH
León
fuente
3

Cuelgo la cabeza con vergüenza, ya que tuve el mismo problema, excepto que en mi caso, la URL que estaba presionando era válida, el certificado era válido. Lo que no era válido era mi conexión a la web. No pude agregar detalles de proxy en el navegador (IE en este caso). Esto impidió que el proceso de verificación ocurriera correctamente.
Agregado en los detalles del proxy y mi python estaba muy feliz.

Anuncios
fuente
1
No se avergüence de olvidar algo y luego descubrirlo y compartirlo, alguien podría encontrarlo útil. Sin embargo, usando IE ... lástima: p
Davos
3

Python 2.7.12 (predeterminado, 29 de julio de 2016, 15:26:22) solucionó el problema mencionado. Esta información puede ayudar a alguien más.

caotín
fuente
3
Lo encontré en 2.7.12 en mac, usando la biblioteca urllib2, usar la biblioteca de solicitudes parece estar bien
marcadian
@marcadian Instalar y usar certifi, que aparentemente es un rasguño de los certificados en poder requests, me solucionó el problema en Python 3.4 a 3.6 .
hBy2Py
3

Me sorprende que todas estas instrucciones no hayan resuelto mi problema. Sin embargo, el diagnóstico es correcto (por cierto, estoy usando Mac y Python3.6.1). Entonces, para resumir la parte correcta:

  • En Mac, Apple está dejando caer OpenSSL
  • Python ahora usa su propio conjunto de certificado raíz de CA
  • La instalación de Python binario proporcionó un script para instalar el certificado raíz de CA que necesita Python ("/ Aplicaciones / Python 3.6 / Instalar Certificados.command")
  • Lea "/ Aplicaciones / Python 3.6 / ReadMe.rtf" para más detalles

Para mí, el script no funciona, y todas esas instalaciones de certifi y openssl también fallaron. Tal vez porque tengo múltiples instalaciones de python 2 y 3, así como muchas virtualenv. Al final, necesito arreglarlo a mano.

pip install certifi   # for your virtualenv
mkdir -p /Library/Frameworks/Python.framework/Versions/3.6/etc/openssl
cp -a <your virtualenv>/site-package/certifi/cacert.pem \
  /Library/Frameworks/Python.framework/Versions/3.6/etc/openssl/cert.pem

Si eso todavía te falla. Luego vuelva a instalar OpenSSL también.

port install openssl
berniey
fuente
2

Al igual que usted, estoy usando Python 2.7 en mi antiguo iMac (OS X 10.6.8), también encontré el problema, usando urllib2.urlopen:

urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]

Mis programas funcionaban bien sin problemas con el certificado SSL y de repente (después de descargar programas), se bloquearon con este error SSL.

El problema era la versión de python utilizada:

  1. No hay problema con https://www.python.org/downloads y python-2.7.9-macosx10.6.pkg

  2. problema con el instalado por la herramienta Homebrew : "brew install python", versión ubicada en / usr / local / bin.

Un capítulo, llamado Certificate verification and OpenSSL [CHANGED for Python 2.7.9], /Applications/Python 2.7/ReadMe.rtfexplica el problema con muchos detalles.

Por lo tanto, verifique, descargue y ponga en su RUTA la versión correcta de python.

Thierry Maillard
fuente
2

Python 2.7 en Amazon EC2 con centOS 7

Tuve que establecer la variable env SSL_CERT_DIRpara apuntar a mi ca-bundleque estaba ubicado en/etc/ssl/certs/ca-bundle.crt

Brian McCall
fuente
Tu respuesta me llevó por el camino correcto. En Ubuntu, he tenido que ajustar SSL_CERT_DIRa /etc/ssl/certs, y también se aseguró el ca-certificatespaquete fue instalado y actualizado.
Norman Breau
1

Tratar

pip install --trusted-host nombre del paquete pypi.python.org

Funcionó para mi.

swapnilghorpade
fuente
1

Echa un vistazo a

/ Aplicaciones / Python 3.6 / Instalar certificados.command

También puede ir a Aplicaciones y hacer clic en Certificados.com

Danielle Cohen
fuente
1

En mi caso, yo estaba recibiendo este error porque requestsy urllib3versiones eran incompatibles, dando el siguiente error durante la instalación:

ERROR: requests 2.21.0 has requirement urllib3<1.25,>=1.21.1, but you'll have urllib3 1.25 which is incompatible.
pip install 'urllib3<1.25' --force-reinstall

Hizo el truco.

fabio.sang
fuente
1

Otra solución de Anaconda. Estaba obteniendo CERTIFICATE_VERIFY_FAILED en mi entorno Python 2.7 en macOS. Resulta que los caminos de conda eran malos:

entorno base (3.7):

>>> import ssl
>>> ssl.get_default_verify_paths()
DefaultVerifyPaths(cafile='/usr/local/anaconda3/ssl/cert.pem', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/anaconda3/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/anaconda3/ssl/certs')

2.7 entorno (¡las rutas no existían!):

DefaultVerifyPaths(cafile='', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/anaconda3/envs/py27/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/anaconda3/envs/py27/ssl/certs')

La solución:

cd /usr/local/anaconda3/envs/py27/
mkdir ssl
cd ssl
ln -s ../../../ssl/cert.pem
Peter Tseng
fuente
1

El error SSL: CERTIFICATE_VERIFY_FAILED también podría ocurrir porque falta un Certificado Intermedio en el ca-certificatespaquete en Linux. Por ejemplo, en mi caso faltaba el certificado intermedio " DigiCert SHA2 Secure Server CA " en el ca-certificatespaquete a pesar de que el navegador Firefox lo incluye. Puede averiguar qué certificado falta al ejecutar directamente el wgetcomando en la URL que causa este error. Luego, puede buscar el enlace correspondiente al archivo CRT para este certificado desde el sitio web oficial (por ejemplo, https://www.digicert.com/digicert-root-certificates.htm en mi caso) de la Autoridad de Certificación. Ahora, para incluir el certificado que falta en su caso, puede ejecutar los siguientes comandos utilizando su enlace de descarga de archivos CRT:

wget https://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt

mv DigiCertSHA2SecureServerCA.crt DigiCertSHA2SecureServerCA.der

openssl x509 -inform DER -outform PEM -in DigiCertSHA2SecureServerCA.der -out DigicertSHA2SecureServerCA.pem.crt

sudo mkdir /usr/share/ca-certificates/extra

sudo cp DigicertSHA2SecureServerCA.pem.crt /usr/share/ca-certificates/extra/

sudo dpkg-reconfigure ca-certificates

Después de esto, puede volver a probar con wgetsu URL, así como con el urllibpaquete python . Para obtener más detalles, consulte: https://bugs.launchpad.net/ubuntu/+source/ca-certificates/+bug/1795242

WebDev
fuente
0

Si está en vCenter 6, en su lugar, debe agregar el certificado de autoridad de certificación vmware de vCenter a la lista de CA de confianza de su sistema operativo. Para descargar su certificado haga lo siguiente

  1. Abre tu navegador web.
  2. Navega a https: //
  3. En la esquina inferior derecha, haga clic en el enlace Descargar Trusted Root CA

En Fedora

  1. descomprimir y cambiar la extensión de .0 a .cer
  2. Cópielo en / etc / pki / ca-trust / source / anchors /
  3. ejecute el comando update-ca-trust.

Enlaces:

  1. https://virtualizationreview.com/articles/2015/04/02/install-root-self-signed-certificate-vcenter-6.aspx?m=1
  2. http://forums.fedoraforum.org/showthread.php?t=293856
nobler1050
fuente
Indicó que se ejecuta en OS X, no vCenter 6.
JWW
0

instalando pasos para nltk (ya tenía python3 (3.6.2) instalado en MAC OS X

sudo easy_install pip

use ignorar la opción instalada para ignorar la desinstalación de la versión anterior de seis, de lo contrario, da un error durante la desinstalación y no avanza la película

sudo pip3 install -U nltk --ignore-installed six

Verifique la instalación de pip y python, use las versiones '3'

which python python2 python3
which pip pip2 pip3

Compruebe si NLTK está instalado

python3
import nltk
nltk.__path__
['/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/nltk']

Instale el certificado SSL antes de instalar el libro de ejemplos, de lo contrario, certificaremos el error al instalar los ejemplos

/Applications/Python\ 3.6/Install\ Certificates.command
python3 -m nltk.downloader book

Eso completó la instalación con éxito de nltk y nltk_ata para ejemplos de libros

Narasimha Sai
fuente
0

Instalar PyOpenSSLusando piptrabajado para mí (sin convertir a PEM):

pip install PyOpenSSL
averma93
fuente
0

Resolví este problema cerrando Fiddler (un proxy de depuración de HTTP) compruebe si tiene un proxy habilitado e intente nuevamente.

vperezb
fuente
0

En Python 2.7, agregar los detalles de CA raíz de confianza al final en el archivo C: \ Python27 \ lib \ site-packages \ certifi \ cacert.pem ayudó

después de eso ejecuté (usando derechos de administrador) pip install --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org packageName

MD5
fuente