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?
python
python-2.7
ssl
ssl-certificate
urllib
usuario3724476
fuente
fuente
Respuestas:
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
Pero si solo quiere que funcione ahora por alguna otra razón, puede hacer lo siguiente, tendrá que
import ssl
: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 .
Hay una opción de exclusión voluntaria que no es diferente a mi consejo anterior:
También presenta una opción altamente desaconsejada a través de monkeypatching que no se ve a menudo en python:
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:
Si desea leer un documento sobre por qué no validar los certificados es malo en el software, ¡puede encontrarlo aquí !
fuente
setup.py upload
¿cómo puedo solucionarlo?certifi
y actualizar openssl en las cajas.context
es lo que necesitabaEsta 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
certifi
paquete 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/
fuente
/Applications/Python\ 3.7/Install\ Certificates.command
ejecutar esto directamenteterminal
! Gracias @CraigGlennie y @muyong, agradezco que hayasout-of-the-box-thinking
colocado esto aquí.Para ampliar la respuesta de Craig Glennie:
en Python 3.6.1 en MacOs Sierra
Ingresar esto en la terminal bash resolvió el problema:
fuente
sudo /Applications/Python\ 3.6/Install\ Certificates.command
si se deniegan los permisos.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:
cacert.pem
ubicación:from requests.utils import DEFAULT_CA_BUNDLE_PATH; print(DEFAULT_CA_BUNDLE_PATH)
cacert.pem
archivo y pegue su certificado de validación de dominio al final del archivo.fuente
lib\site-packages\certifi\cacert.pem
no existe en Python 2.7.10. Y la pregunta es sobreurllib2
norequests
/usr/local/lib/python2.7/dist-packages/certifi-2015.09.06.2-py2.7.egg/certifi/cacert.pem
. ¡Gracias!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
fuente
Podría intentar agregar esto a sus variables de entorno:
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.
fuente
Estaba teniendo un problema similar, aunque yo estaba usando
urllib.request.urlopen
en Python 3.4, 3.5, y 3.6 . (Esta es una parte del equivalente de Python 3urllib2
, según la nota al comienzo de la página de documentación de Python 2urllib2
).Mi solución fue
pip install certifi
instalarcertifi
, que tiene:Luego, en mi código donde anteriormente tenía:
Lo revisé a:
Si leo la
urllib2.urlopen
documentación correctamente, también tiene uncafile
argumento. Por lo tanto, tambiénurllib2.urlopen([...], certifi.where())
podría funcionar para Python 2.7.ACTUALIZACIÓN (2020-01-01): a partir de Python 3.6, el
cafile
argumento deurlopen
ha quedado en desuso , y secontext
supone que se debe especificar el argumento. Encontré lo siguiente para trabajar igualmente bien en 3.5 a 3.8:fuente
load_verify_locations
muta laSSLContext
instancia y vuelveNone
. Deberías usarcontext=ssl.create_default_context(cafile=certifi.where())
en su lugar. Vea losssl
documentos para más información.ssl
función incorrecta . Ver editar; ¿De acuerdo?Tomado de aquí https://gist.github.com/michaelrice/a6794a017e349fc65d01
fuente
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
cafile
opción de acuerdo con la documentación de Python :fuente
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í:
fuente
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 .fuente
He encontrado esto aquí
Encontré esta solución, inserte este código al comienzo de su archivo fuente:
Este código deshace la verificación para que no se verifique la certificación SSL.
fuente
Para Python 3.4+ en Centos 6/7 , Fedora , simplemente instale la CA confiable de esta manera:
/etc/pki/ca-trust/source/anchors/
update-ca-trust force-enable
update-ca-trust extract
fuente
Solución para Anaconda
Mi configuración es Anaconda Python 3.7 en MacOS con un proxy. Los caminos son diferentes.
que en mi sistema produjo
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:
Si no recuerda dónde está su certificado, puede encontrarlo en
~/.condarc
:Ahora concatene ese archivo al final
/miniconda3/ssl/cert.pem
y las solicitudes deberían funcionar, y en particularsklearn.datasets
y 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.X
simplemente no existe.La ruta proporcionada por los siguientes comandos es la ruta INCORRECTA
fuente
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.
fuente
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.
fuente
certifi
, que aparentemente es un rasguño de los certificados en poderrequests
, me solucionó el problema en Python 3.4 a 3.6 .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:
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.
Si eso todavía te falla. Luego vuelva a instalar OpenSSL también.
fuente
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:
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:
No hay problema con https://www.python.org/downloads y python-2.7.9-macosx10.6.pkg
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.rtf
explica el problema con muchos detalles.Por lo tanto, verifique, descargue y ponga en su RUTA la versión correcta de python.
fuente
Python 2.7 en Amazon EC2 con centOS 7
Tuve que establecer la variable env
SSL_CERT_DIR
para apuntar a mica-bundle
que estaba ubicado en/etc/ssl/certs/ca-bundle.crt
fuente
SSL_CERT_DIR
a/etc/ssl/certs
, y también se aseguró elca-certificates
paquete fue instalado y actualizado.Fuente: https://access.redhat.com/articles/2039753
fuente
Tratar
Funcionó para mi.
fuente
Echa un vistazo a
/ Aplicaciones / Python 3.6 / Instalar certificados.command
También puede ir a Aplicaciones y hacer clic en Certificados.com
fuente
En mi caso, yo estaba recibiendo este error porque
requests
yurllib3
versiones eran incompatibles, dando el siguiente error durante la instalación:Hizo el truco.
fuente
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):
2.7 entorno (¡las rutas no existían!):
La solución:
fuente
El error SSL: CERTIFICATE_VERIFY_FAILED también podría ocurrir porque falta un Certificado Intermedio en el
ca-certificates
paquete en Linux. Por ejemplo, en mi caso faltaba el certificado intermedio " DigiCert SHA2 Secure Server CA " en elca-certificates
paquete a pesar de que el navegador Firefox lo incluye. Puede averiguar qué certificado falta al ejecutar directamente elwget
comando 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:Después de esto, puede volver a probar con
wget
su URL, así como con elurllib
paquete python . Para obtener más detalles, consulte: https://bugs.launchpad.net/ubuntu/+source/ca-certificates/+bug/1795242fuente
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
En Fedora
Enlaces:
fuente
instalando pasos para nltk (ya tenía python3 (3.6.2) instalado en MAC OS X
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
Verifique la instalación de pip y python, use las versiones '3'
Compruebe si NLTK está instalado
Instale el certificado SSL antes de instalar el libro de ejemplos, de lo contrario, certificaremos el error al instalar los ejemplos
Eso completó la instalación con éxito de nltk y nltk_ata para ejemplos de libros
fuente
Instalar
PyOpenSSL
usandopip
trabajado para mí (sin convertir a PEM):fuente
Resolví este problema cerrando Fiddler (un proxy de depuración de HTTP) compruebe si tiene un proxy habilitado e intente nuevamente.
fuente
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
fuente