Je reçois l'erreur suivante:
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)>
C'est le code qui provoque cette erreur:
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)
L'API que j'utilise m'oblige à utiliser HTTPS. Comment puis-je contourner la vérification?
python
python-2.7
ssl
ssl-certificate
urllib
user3724476
la source
la source
Réponses:
Si vous souhaitez simplement contourner la vérification, vous pouvez créer un nouveau SSLContext . Par défaut, les nouveaux contextes créés utilisent CERT_NONE .
Soyez prudent avec cela, comme indiqué dans la section 17.3.7.2.1
Mais si vous voulez simplement que cela fonctionne maintenant pour une autre raison, vous pouvez effectuer les opérations suivantes, vous devrez également le faire
import ssl
:Cela devrait contourner votre problème, mais vous ne résolvez pas vraiment aucun des problèmes, mais vous ne verrez pas le
[SSL: CERTIFICATE_VERIFY_FAILED]
car vous ne vérifiez pas le certificat!Pour ajouter à ce qui précède, si vous voulez en savoir plus sur les raisons pour lesquelles vous voyez ces problèmes, vous voudrez peut-être jeter un œil au PEP 476 .
Il existe une option de désactivation conseillée qui n'est pas différente de mes conseils ci-dessus:
Il propose également une option très découragée via le monkeypatching que vous ne voyez pas souvent en python:
Ce qui remplace la fonction par défaut pour la création de contexte avec la fonction pour créer un contexte non vérifié.
Veuillez noter ceci comme indiqué dans le PEP:
Si vous voulez lire un article sur pourquoi ne pas valider les certificats est mauvais dans le logiciel, vous pouvez le trouver ici !
la source
setup.py upload
comment puis-je résoudre ce problème?certifi
et la mise à jour d'OpenSL sur les boîtes.context
est ce dont j'avais besoinCe n'est pas une solution à votre problème spécifique, mais je le mets ici parce que ce fil est le meilleur résultat Google pour "SSL: CERTIFICATE_VERIFY_FAILED", et cela m'a mené à une chasse aux oies sauvages.
Si vous avez installé Python 3.6 sur OSX et obtenez l'erreur "SSL: CERTIFICATE_VERIFY_FAILED" lorsque vous essayez de vous connecter à un site https: //, c'est probablement parce que Python 3.6 sur OSX n'a aucun certificat et ne peut pas valider de SSL Connexions. Il s'agit d'un changement pour 3.6 sur OSX, et nécessite une étape de post-installation, qui installe le
certifi
package de certificats. Ceci est documenté dans le ReadMe, que vous devriez trouver sur/Applications/Python\ 3.6/ReadMe.rtf
Le ReadMe vous fera exécuter ce script de post-installation, qui installe simplement
certifi
:/Applications/Python\ 3.6/Install\ Certificates.command
Les notes de version contiennent plus d'informations: https://www.python.org/downloads/release/python-360/
la source
/Applications/Python\ 3.7/Install\ Certificates.command
exécutant cela directementterminal
! Merci @CraigGlennie & @muyong J'apprécie d'out-of-the-box-thinking
avoir placé ceci ici!Pour développer la réponse de Craig Glennie:
en Python 3.6.1 sur MacOs Sierra
La saisie de ceci dans le terminal bash a résolu le problème:
la source
sudo /Applications/Python\ 3.6/Install\ Certificates.command
si les autorisations sont refusées.Sous Windows, Python ne regarde pas le certificat système, il utilise le sien situé à
?\lib\site-packages\certifi\cacert.pem
.La solution à votre problème:
cacert.pem
emplacement:from requests.utils import DEFAULT_CA_BUNDLE_PATH; print(DEFAULT_CA_BUNDLE_PATH)
cacert.pem
fichier et collez votre certificat de validation de domaine à la fin du fichier.la source
lib\site-packages\certifi\cacert.pem
n'existe pas dans Python 2.7.10. Et la question est deurllib2
ne pasrequests
/usr/local/lib/python2.7/dist-packages/certifi-2015.09.06.2-py2.7.egg/certifi/cacert.pem
. Merci!Ma solution pour Mac OS X:
1) Mettez à niveau vers Python 3.6.5 à l'aide du programme d'installation natif de l'application Python téléchargé à partir du site Web officiel en langue Python https://www.python.org/downloads/
J'ai trouvé que ce programme d'installation s'occupe de mettre à jour les liens et les liens symboliques pour le nouveau Python beaucoup mieux que homebrew.
2) Installez un nouveau certificat à l'aide de "./Install Certificates.command" qui se trouve dans le répertoire Python 3.6 actualisé
la source
Vous pouvez essayer d'ajouter ceci à vos variables d'environnement:
Notez que cela désactivera toutes les vérifications HTTP, c'est donc un peu une approche de marteau, mais si la vérification n'est pas requise, cela peut être une solution efficace.
la source
J'avais un problème similaire, bien que j'utilisais
urllib.request.urlopen
en Python 3.4, 3.5 et 3.6 . (Ceci est une partie de l'équivalent Python 3urllib2
, selon la note en tête de la page de documentation de Python 2urllib2
)Ma solution a été d'
pip install certifi
installercertifi
, ce qui a:Ensuite, dans mon code où je venais juste d'avoir:
Je l'ai révisé pour:
Si je lis correctement la
urllib2.urlopen
documentation , elle contient également uncafile
argument. Donc, celaurllib2.urlopen([...], certifi.where())
pourrait aussi fonctionner pour Python 2.7.MISE À JOUR (2020-01-01): Depuis Python 3.6, l'
cafile
argument tourlopen
a été déprécié , l'context
argument étant censé être spécifié à la place. J'ai trouvé que ce qui suit fonctionnait aussi bien sur les versions 3.5 à 3.8:la source
load_verify_locations
mute l'SSLContext
instance et retourneNone
. Vous devez utiliser à lacontext=ssl.create_default_context(cafile=certifi.where())
place. Voir lassl
documentation pour plus d'informations.ssl
fonction. Voir modifier; D'accord?Tiré d'ici https://gist.github.com/michaelrice/a6794a017e349fc65d01
la source
Comme je l'ai écrit dans un commentaire, ce problème est probablement lié à cette réponse SO .
En bref: il existe plusieurs façons de vérifier le certificat. La vérification utilisée par OpenSSL est incompatible avec les certificats racine de confiance que vous avez sur votre système. OpenSSL est utilisé par Python.
Vous pouvez essayer d'obtenir le certificat manquant pour Verisign Class 3 Public Primary Certification Authority , puis utiliser l'
cafile
option selon la documentation Python :la source
J'ai eu un problème similaire sur l'une de mes machines Linux. La génération de nouveaux certificats et l'exportation d'une variable d'environnement pointant vers le répertoire des certificats l'a corrigé pour moi:
la source
Je dois ajouter une autre réponse car, tout comme Craig Glennie, j'ai fait une chasse aux oies sauvages en raison des nombreux messages faisant référence à ce problème sur le Web.
J'utilise MacPorts, et ce que je pensais à l'origine être un problème Python était en fait un problème MacPorts: il n'installe pas de certificat racine avec son installation d'openssl. La solution consiste à
port install curl-ca-bundle
, comme mentionné dans cet article de blog .la source
J'ai trouvé ça ici
J'ai trouvé cette solution, insérez ce code au début de votre fichier source:
Ce code annule la vérification afin que la certification SSL ne soit pas vérifiée.
la source
Pour Python 3.4+ sur Centos 6/7, Fedora , installez simplement l'autorité de certification de cette façon:
/etc/pki/ca-trust/source/anchors/
update-ca-trust force-enable
update-ca-trust extract
la source
Solution pour Anaconda
Ma configuration est Anaconda Python 3.7 sur MacOS avec un proxy. Les chemins sont différents.
qui sur mon système a produit
Une fois que vous savez où va le certificat, vous concaténez le certificat utilisé par le proxy à la fin de ce fichier.
J'avais déjà configuré conda pour travailler avec mon proxy, en exécutant:
Si vous ne vous souvenez pas où se trouve votre certificat, vous pouvez le trouver dans
~/.condarc
:Maintenant, concaténez ce fichier à la fin de
/miniconda3/ssl/cert.pem
et les demandes devraient fonctionner, et en particuliersklearn.datasets
des outils similaires devraient fonctionner.Autres mises en garde
Les autres solutions n'ont pas fonctionné car la configuration d'Anaconda est légèrement différente:
Le chemin
Applications/Python\ 3.X
n'existe tout simplement pas.Le chemin fourni par les commandes ci-dessous est le mauvais chemin
la source
Je pends la tête en semi-honte, car j'ai eu le même problème, sauf que dans mon cas, l'URL que je tapais était valide, le certificat était valide. Ce qui n'était pas valable, c'était ma connexion au Web. Je n'avais pas réussi à ajouter les détails du proxy dans le navigateur (IE dans ce cas). Cela a empêché le processus de vérification de se dérouler correctement.
Ajouté dans les détails du proxy et mon python était alors très content.
la source
Python 2.7.12 (par défaut, 29 juillet 2016, 15:26:22) a résolu le problème mentionné. Ces informations pourraient aider quelqu'un d'autre.
la source
certifi
, qui est apparemment une égratignure des certificats détenus parrequests
, ont résolu le problème pour moi sur Python 3.4 à 3.6 .Je suis surpris que toutes ces instructions n'aient pas résolu mon problème. Néanmoins, le diagnostic est correct (BTW, j'utilise Mac et Python3.6.1). Donc, pour résumer la bonne partie:
Pour moi, le script ne fonctionne pas, et toutes ces installations certifi et openssl n'ont pas pu être corrigées également. Peut-être parce que j'ai plusieurs installations python 2 et 3, ainsi que de nombreux virtualenv. À la fin, je dois le réparer à la main.
Si cela vous échoue encore. Réinstallez ensuite OpenSSL également.
la source
Comme vous, j'utilise python 2.7 sur mon ancien iMac (OS X 10.6.8), j'ai aussi rencontré le problème en utilisant urllib2.urlopen:
Mes programmes fonctionnaient bien sans problèmes de certificat SSL et soudainement (après avoir téléchargé des programmes), ils se sont plantés avec cette erreur SSL.
Le problème était la version de python utilisée:
Pas de problème avec https://www.python.org/downloads et python-2.7.9-macosx10.6.pkg
problème avec celui installé par l' outil Homebrew : "brew install python", version située dans / usr / local / bin.
Un chapitre, intitulé
Certificate verification and OpenSSL [CHANGED for Python 2.7.9]
,/Applications/Python 2.7/ReadMe.rtf
explique le problème avec de nombreux détails.Alors, vérifiez, téléchargez et mettez dans votre PATH la bonne version de python.
la source
Python 2.7 sur Amazon EC2 avec centOS 7
J'ai dû définir la variable env
SSL_CERT_DIR
pour pointer vers monca-bundle
qui était situé à/etc/ssl/certs/ca-bundle.crt
la source
SSL_CERT_DIR
à/etc/ssl/certs
, et a également fait que leca-certificates
paquet a été installé et à jour.Source: https://access.redhat.com/articles/2039753
la source
Essayer
Ça a marché pour moi.
la source
Jeter un coup d'œil à
/ Applications / Python 3.6 / Installer Certificates.command
Vous pouvez également aller sur Aplications et cliquer sur Certificates.command
la source
Dans mon cas , je recevais cette erreur , car
requests
eturllib3
étaient incompatibles, donnant des versions l'erreur suivante lors de l' installation:a fait l'affaire.
la source
Une autre solution Anaconda. J'obtenais CERTIFICATE_VERIFY_FAILED dans mon environnement Python 2.7 sur macOS. Il s'avère que les chemins de conda étaient mauvais:
environnement de base (3.7):
2.7 environnement (les chemins n'existaient pas!):
La solution:
la source
L'erreur SSL: CERTIFICATE_VERIFY_FAILED peut également se produire car un certificat intermédiaire est manquant dans le
ca-certificates
package sous Linux. Par exemple, dans mon cas, le certificat intermédiaire " DigiCert SHA2 Secure Server CA " était manquant dans leca-certificates
package même si le navigateur Firefox l'inclut. Vous pouvez savoir quel certificat est manquant en exécutant directement lawget
commande sur l'URL à l'origine de cette erreur. Ensuite, vous pouvez rechercher le lien correspondant vers le fichier CRT pour ce certificat sur le site officiel (par exemple https://www.digicert.com/digicert-root-certificates.htm dans mon cas) de l'autorité de certification. Maintenant, pour inclure le certificat manquant dans votre cas, vous pouvez exécuter les commandes ci-dessous en utilisant votre lien de téléchargement de fichier CRT à la place:Après cela, vous pouvez tester à nouveau avec
wget
votre URL ainsi qu'en utilisant leurllib
package python . Pour plus de détails, consultez: https://bugs.launchpad.net/ubuntu/+source/ca-certificates/+bug/1795242la source
Si vous êtes sur vCenter 6, vous devez plutôt ajouter le certificat d'autorité de certification vmware de votre vCenter à la liste des autorités de certification de confiance de votre système d'exploitation. Pour télécharger votre certificat, procédez comme suit
Sur Fedora
Liens:
la source
installation des étapes pour nltk (j'avais python3 (3.6.2) déjà installé dans MAC OS X
utilisez l'option ignorer installé pour ignorer la désinstallation de la version précédente de six, sinon, cela donne une erreur lors de la désinstallation et ne fait pas avancer le film
Vérifiez l'installation de pip et python, utilisez les versions '3'
Vérifiez si NLTK est installé
Installez le certificat SSL avant d'installer le livre d'exemples, sinon nous certifierons l'erreur lors de l'installation des exemples
Cela a terminé l'installation avec succès de nltk et nltk_ata pour des exemples de livres
la source
L'installation à l'
PyOpenSSL
aide apip
fonctionné pour moi (sans conversion en PEM):la source
J'ai résolu ce problème en fermant Fiddler (un proxy de débogage HTTP), vérifiez si vous avez un proxy activé et réessayez.
la source
Dans python 2.7, l'ajout des détails de l'autorité de certification racine de confiance à la fin dans le fichier C: \ Python27 \ lib \ site-packages \ certifi \ cacert.pem a aidé
après cela, j'ai exécuté (en utilisant les droits d'administrateur) pip install --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org packageName
la source