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

0voto

rhoerbe Punkte 433

Es ist nicht möglich, Optionen hinzuzufügen, wenn Anfragen aus einem anderen Paket aufgerufen werden. In diesem Fall ist das Hinzufügen von Zertifikaten zum cacert-Paket der direkte Weg, z.B. musste ich "StartCom Class 1 Primary Intermediate Server CA" hinzufügen, wofür ich das Root-Zertifikat in StartComClass1.pem heruntergeladen habe. da meine virtualenv caldav heißt, habe ich das Zertifikat mit hinzugefügt:

cat StartComClass1.pem >> .virtualenvs/caldav/lib/python2.7/site-packages/pip/_vendor/requests/cacert.pem
cat temp/StartComClass1.pem >> .virtualenvs/caldav/lib/python2.7/site-packages/requests/cacert.pem

eine davon könnte ausreichen, ich habe es nicht überprüft

0voto

Neutral Punkte 13

Wenn es heißt verify nimmt "Pfad zum Zertifikat" und verweist auf das Ausstellerzertifikat, damit es zur Überprüfung des Zertifikats der URL verwendet werden kann. curl y wget waren mit dieser Bescheinigung einverstanden. Aber nicht mit Python-Anfragen.

Ich musste eine Zertifikatskette mit allen Zertifikaten vom Ende (Blatt?) bis zum Root erstellen, damit die Python-Anfragen problemlos verarbeitet werden konnten. Und die Kette funktioniert natürlich auch mit cURL und Wget gut.

Ich hoffe, es hilft jemandem und spart ein paar Stunden.

-2voto

Default Punkte 524

Dies ist nur eine weitere Möglichkeit, wie Sie versuchen können, das Problem zu lösen.

Wenn Sie "www.example.com" eingeben, schreien die Anfragen Sie an. Wenn Sie "https://www.example.com" eingeben, erhalten Sie diese Fehlermeldung. Wenn Sie also KEIN https benötigen, können Sie den Fehler vermeiden, indem Sie "https" in "http" ändern. z. B. "http://www.example.com"

WARNUNG: Die Nichtverwendung von HTTPS ist generell keine gute Idee . Siehe Warum HTTPS für alles? Warum HTTPS wichtig ist

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