urllib und "SSL: CERTIFICATE_VERIFY_FAILED" Fehler
Ich bin immer diese Fehlermeldung
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)>
Dies ist der code, der diesen Fehler verursacht:
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)
Die API Im Einsatz, verlangt von mir für die Verwendung des https. Wie kann ich es umgehen der Verifizierung?
InformationsquelleAutor der Frage user3724476 | 2015-01-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nur umgehen möchten, Verifikation, erstellen Sie eine neue SSLContext. Standardmäßig neu erstellten Kontexte verwenden CERT_NONE.
Seien Sie vorsichtig mit dieser, wie bereits in Abschnitt 17.3.7.2.1
Aber wenn Sie nur wollen, dass es funktioniert jetzt aus irgendeinem anderen Grund, können Sie das folgende tun, müssen Sie
import ssl
:Sollten sich die Runde Ihr problem, aber Sie sind nicht wirklich die Lösung der Probleme, aber Sie werden nicht sehen, die
[SSL: CERTIFICATE_VERIFY_FAILED]
weil Sie jetzt nicht überprüfen, das cert!Hinzufügen zu den oben genannten, wenn Sie mehr darüber wissen möchten, warum Sie sehen diese Probleme werden Sie wollen, um einen Blick auf PEP 476.
Gibt es eine geraten, die opt-out-das ist nicht unähnlich mein Rat oben:
Es verfügt auch über eine dringend abgeraten option über monkeypatchingdie Sie nicht oft zu sehen in python:
Die überschreibt die default-Funktion für den Zusammenhang der Schöpfung mit der Funktion zum erstellen von einem nicht überprüften Kontext.
Wenn Sie möchten, Lesen Sie ein Papier auf, warum nicht die Validierung von certs ist schlecht in software Sie können es hier finden!
InformationsquelleAutor der Antwort Noelkd
Dies ist keine Lösung zu Ihrem spezifischen problem, aber ich Stelle es hier, weil dieser thread die top-Google-Ergebnis für "SSL: CERTIFICATE_VERIFY_FAILED", und es führte mich auf einem wild-goose chase.
Wenn Sie installiert haben Python 3.6 für OSX und der "SSL: CERTIFICATE_VERIFY_FAILED" Fehlermeldung, wenn Sie versuchen, eine Verbindung zu einem https://Website, es ' s wahrscheinlich, weil Python 3.6 für OSX hat keine Zertifikate, und kann nicht überprüfen von SSL-verbindungen. Dies ist eine Veränderung zum 3.6 für OS x, und erfordert eine post-install-Schritt installiert die
certifi
Paket von Zertifikaten. Dies ist dokumentiert in der ReadMe-Datei, welche Sie finden sollen bei/Applications/Python\ 3.6/ReadMe.rtf
Der ReadMe-Datei Sie haben, führen Sie das post-install-Skript, welches einfach installiert
certifi
:/Applications/Python\ 3.6/Install\ Certificates.command
Release notes einige weitere Infos: https://www.python.org/downloads/release/python-360/
InformationsquelleAutor der Antwort Craig Glennie
Unter Windows, Python, blickt nicht in die system-Zertifikat, den es verwendet seine eigene sich an
?\lib\site-packages\certifi\cacert.pem
.Die Lösung zu deinem problem:
cacert.pem
Ort:from requests.utils import DEFAULT_CA_BUNDLE_PATH; print(DEFAULT_CA_BUNDLE_PATH)
cacert.pem
Datei und fügen Sie Ihren domain-validation-Zertifikat am Ende der Datei.InformationsquelleAutor der Antwort Bruno Gabuzomeu
Erweitern Craig Glennie ' s Antwort (sorry, nicht genug Ruf um Kommentar):
in Python 3.6.1 auf MacOs Sierra
Eingabe dieser in die bash-terminal das problem gelöst:
InformationsquelleAutor der Antwort jnPy
Könnten Sie versuchen, das hinzufügen dieser zu Ihrer Umgebungsvariablen:
Beachten Sie, dass das deaktivieren alle HTTP-überprüfung ist so ein bisschen eine Brechstange, jedoch, wenn eine überprüfung ist nicht erforderlich, es kann eine effektive Lösung.
InformationsquelleAutor der Antwort Chris Halcrow
Wie ich geschrieben habe, in einem Kommentar, dieses problem ist wohl im Zusammenhang mit diese SO beantworten.
Kurz: es gibt mehrere Möglichkeiten, um das Zertifikat zu überprüfen. Die Prüfung verwendet, die von OpenSSL ist nicht kompatibel mit der vertrauenswürdigen root-Zertifikate, die Sie auf Ihrem system haben. OpenSSL wird von Python.
Könnten Sie versuchen, sich die fehlenden Zertifikat für Verisign Class 3 Public Primary Certification Authority und verwenden Sie dann die
cafile
option nach der Python-Dokumentation:InformationsquelleAutor der Antwort Steffen Ullrich
Hier https://gist.github.com/michaelrice/a6794a017e349fc65d01
InformationsquelleAutor der Antwort Prostak
Meine Lösung für Mac OS X:
1) Upgrade auf Python 3.6.5 Verwendung der nativen app-Python-installer heruntergeladen von der offiziellen Python-website https://www.python.org/downloads/
Habe ich herausgefunden, dass das Installationsprogramm kümmert sich um die Aktualisierung der links und symbolische Links für die neue Python viel besser als homebrew.
2) Installieren Sie ein neues Zertifikat "./Zertifikate Installieren.Befehl", die in die aktuelle Python-3.6 Verzeichnis
InformationsquelleAutor der Antwort Claude COULOMBE
Ich hatte ein ähnliches problem, allerdings war ich mit
urllib.request.urlopen
im Python 3.4, 3.5 und 3.6. (Dies ist ein Teil der Python-3 entspricht derurllib2
pro die Anmerkung an den Kopf der Python 2urllib2
- Dokumentation Seite.)Meine Lösung war
pip install certifi
zu installierenZertifikat
die hat:Dann in meinem code, wo ich vorher nur hatte:
Ich es überarbeitet:
Wenn ich lese, das
urllib2.urlopen
- Dokumentation richtig, es hat auch einecafile
argument. Alsourllib2.urlopen([...], certifi.where())
könnte arbeiten für Python 2.7 als auch.InformationsquelleAutor der Antwort hBy2Py
Für Python 3.4+ auf Centos 6/7,Fedorainstallieren Sie nur Vertrauenswürdige CA so :
/etc/pki/ca-trust/source/anchors/
update-ca-trust force-enable
update-ca-trust extract
InformationsquelleAutor der Antwort Cherif KAOUA
Hänge ich mein Kopf halb in Scham, als ich hatte das gleiche Problem, außer dass in meinem Fall die URL, die ich traf war gültig, das Zertifikat gültig war. Was war nicht gültig war meine Verbindung aus dem web. Ich hatte Fehler beim hinzufügen proxy-details in den browser (IE, in diesem Fall). Dies beendet die überprüfung geschieht korrekt.
Hinzugefügt in den proxy-Daten und mein python-war dann sehr glücklich .
InformationsquelleAutor der Antwort Ads
Wie du, ich bin mit python 2.7 auf meinem alten iMac (OS X 10.6.8), traf ich das problem auch, mit urllib2.urlopen :
Meine Programme laufen problemlos auch ohne SSL-Zertifikat Probleme und suddently (nach geladen werden muss-Programme), Sie stürzte mit diesem SSL-Fehler.
Das problem war die version von python verwendet :
Kein problem mit https://www.python.org/downloads und python-2.7.9-macosx10.6.pkg
problem mit einem instaliert von Homebrew-tool : "brew install python", version befindet sich in /usr/local/bin.
Einem Kapitel, genannt
Certificate verification and OpenSSL [CHANGED for Python 2.7.9]
im/Applications/Python 2.7/ReadMe.rtf
erklärt das problem mit vielen details.Also prüfen, herunterladen und in Ihrem PFAD die richtige version von python.
InformationsquelleAutor der Antwort Thierry Maillard
Versuchen
Es funktionierte für mich.
InformationsquelleAutor der Antwort user3603105
Muss ich hinzufügen, eine andere Antwort, weil genau wie Craig Glennie, ich ging auf einem wild-goose chase aufgrund der vielen Beiträge die auf dieses problem in der Web.
Ich benutze MacPorts, und das, was ich ursprünglich dachte, war ein Python-problem war in der Tat ein MacPorts problem: es installiert sich nicht um ein root-Zertifikat mit der installation von openssl. Die Lösung ist
port install curl-ca-bundle
- wie bereits erwähnt-in in diesem blog-post.InformationsquelleAutor der Antwort corwin.amber
Werfen Sie einen Blick auf
/Anwendungen/Python 3.6/Zertifikate Installieren.Befehl
Können Sie auch gehen Sie auf Anwendungen und klicken Sie auf Zertifikate.Befehl
InformationsquelleAutor der Antwort Danielle Cohen
Ich bin überrascht, all diese Instruktion hat nicht mein problem gelöst. Dennoch, die Diagnose richtig ist (BTW, ich bin mit Mac und Python ist3.6.1). Also, um zusammenzufassen das richtige Teil :
Für mich, das script funktioniert nicht, und alle, die Zertifizierung und openssl-Fehler bei der installation zu beheben zu können. Vielleicht, weil ich mehrere python 2-und 3-Installationen, sowie viele virtualenv. Am Ende, ich brauche, um es zu beheben mit der hand.
Wenn das immer noch nicht. Dann re - /installieren von OpenSSL als gut.
InformationsquelleAutor der Antwort berniey
Wenn Ihr auf vCenter 6, sollten Sie stattdessen fügen Sie Ihre vCenter vmware certificate authority cert Ihres Betriebssystems Liste der vertrauenswürdigen CAS. Zum download von cert die folgenden
Fedora
Links:
InformationsquelleAutor der Antwort nobler1050
Python-2.7.12 (default, Jul 29 2016, 15:26:22) fest, die genannten Problem. Diese Informationen können helfen, jemand anderes.
InformationsquelleAutor der Antwort caot
Installation Schritte für nltk (ich hatte Python ist3 (3.6.2) installiert, die bereits in MAC OS X
ignorieren verwenden, installiert option zum ignorieren der deinstallation der vorherigen version der sechs, sonst gibt es einen Fehler bei der deinstallation und nicht Film vorwärts
Überprüfen Sie die installation von pip und python, verwenden Sie die '3' - Versionen
Prüfen, ob NLTK installiert ist
Installieren von SSL-Zertifikat vor der Installation der Beispiele Buch, sonst werden wir Zertifikatfehler beim installieren der Beispiele
Dass die installation abgeschlossen erfolgreich von nltk und nltk_ata für die Buch-Beispiele
InformationsquelleAutor der Antwort Narasimha Sai
Installieren
PyOpenSSL
mitpip
für mich gearbeitet (ohne Konvertierung in PEM):InformationsquelleAutor der Antwort averma93
Ich hatte dieses problem gelöst durch die Schließung von Fiddler (ein HTTP debugging proxy) überprüfen Sie, ob ein proxy aktiviert ist und versuchen Sie es erneut.
InformationsquelleAutor der Antwort vperezb
Python 2.7 auf Amazon EC2 mit centOS 7
Hatte ich zum setzen der env-variable
SSL_CERT_DIR
zu zeigen, um meineca-bundle
die sich auf/etc/ssl/certs/ca-bundle.crt
InformationsquelleAutor der Antwort Brian McCall
ln -s /usr/local/share/certs/ca-root-nss.crt /etc/ssl/cert.pem
(
FreeBSD 10.1
)InformationsquelleAutor der Antwort Aleksei Kostiushenko