489 Stimmen

Python-Anfragen, die einen SSLError auslösen

Ich arbeite an einem einfachen Skript, das CAS, Jspring-Sicherheitsprüfung, Umleitung usw. umfasst. Ich würde gerne Kenneth Reitz' Python Requests verwenden, weil es ein großartiges Stück Arbeit ist! CAS erfordert jedoch eine Validierung über SSL, so dass ich diesen Schritt zuerst überwinden muss. Ich weiß nicht, was Python requests will? Wo soll sich dieses SSL-Zertifikat befinden?

Traceback (most recent call last):
  File "./test.py", line 24, in <module>
  response = requests.get(url1, headers=headers)
  File "build/bdist.linux-x86_64/egg/requests/api.py", line 52, in get
  File "build/bdist.linux-x86_64/egg/requests/api.py", line 40, in request
  File "build/bdist.linux-x86_64/egg/requests/sessions.py", line 209, in request 
  File "build/bdist.linux-x86_64/egg/requests/models.py", line 624, in send
  File "build/bdist.linux-x86_64/egg/requests/models.py", line 300, in _build_response
  File "build/bdist.linux-x86_64/egg/requests/models.py", line 611, in send
requests.exceptions.SSLError: [Errno 1] _ssl.c:503: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

1voto

Michael Punkte 199

Wie von @Rafael Almeida erwähnt, wird das Problem, das Sie haben, durch ein nicht vertrauenswürdiges SSL-Zertifikat verursacht. In meinem Fall wurde das SSL-Zertifikat von meinem Server nicht als vertrauenswürdig eingestuft. Um dies zu umgehen, ohne die Sicherheit zu gefährden, habe ich das Zertifikat heruntergeladen und installierte es auf dem Server (indem Sie einfach auf die .crt-Datei doppelklicken und dann Zertifikat installieren...).

1voto

mastDrinkNimbuPani Punkte 1102

In meinem Fall war der Grund ziemlich trivial.

Ich wusste, dass die SSL-Überprüfung bis vor ein paar Tagen funktioniert hatte, und zwar auf einem anderen Rechner.

Als Nächstes verglich ich den Inhalt und die Größe des Zertifikats zwischen dem Rechner, auf dem die Überprüfung funktionierte, und dem, auf dem sie nicht funktionierte.

Dies führte schnell dazu, dass ich feststellte, dass das Zertifikat auf dem "fehlerhaft" arbeitenden Rechner nicht gut war, und nachdem ich es durch das "gute" Zertifikat ersetzt hatte, war alles in Ordnung.

0voto

Paul Punkte 2239

Ich musste von Python 3.4.0 auf 3.4.6 aktualisieren

pyenv virtualenv 3.4.6 myvenv
pyenv activate myvenv
pip install -r requirements.txt

0voto

Urban P. Punkte 129

Ich fand diese Antwort die das Problem behoben hat:

import ssl
import certifi
import urllib.request

url = "https://www.google.com/"
html = urllib.request.urlopen(url, context=ssl.create_default_context(cafile=certifi.where()))

Ich habe allerdings keine Ahnung, was es bewirkt.

0voto

Tim Ludwinski Punkte 2349

Ich hatte ein ähnliches oder dasselbe Problem bei der Validierung der Zertifizierung. Ich habe gelesen, dass OpenSSL-Versionen unter 1.0.2, von denen die Anfragen abhängen, manchmal Probleme haben, starke Zertifikate zu validieren (siehe aquí ). CentOS 7 scheint die Version 1.0.1e zu verwenden, die das Problem zu haben scheint.

Ich war mir nicht sicher, wie ich dieses Problem unter CentOS umgehen sollte, also entschied ich mich, schwächere 1024bit CA-Zertifikate zuzulassen.

import certifi # This should be already installed as a dependency of 'requests'
requests.get("https://example.com", verify=certifi.old_where())

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X