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

10voto

yogesh prasad Punkte 151

Wenn Sie sich nicht um das Zertifikat kümmern, verwenden Sie einfach verify=False .

import requests

url = "Write your url here"

returnResponse = requests.get(url, verify=False)

8voto

michael Punkte 562

Nach stundenlanger Fehlersuche konnte ich dies nur mit den folgenden Paketen zum Laufen bringen:

requests[security]==2.7.0  # not 2.18.1
cryptography==1.9  # not 2.0

mit OpenSSL 1.0.2g 1 Mar 2016

Ohne diese Pakete verify=False nicht funktioniert hat.

Ich hoffe, das hilft jemandem.

6voto

Marius Craciunoiu Punkte 176

Ich bin auf das gleiche Problem gestoßen. Es stellte sich heraus, dass ich das Zwischenzertifikat nicht auf meinem Server installiert hatte (fügen Sie es einfach an das Ende Ihres Zertifikats an, wie unten zu sehen).

https://www.digicert.com/ssl-support/pem-ssl-creation.htm

Stellen Sie sicher, dass Sie das Paket ca-certificates installiert haben:

sudo apt-get install ca-certificates

Auch eine Aktualisierung der Uhrzeit kann dieses Problem lösen:

sudo apt-get install ntpdate
sudo ntpdate -u ntp.ubuntu.com

Wenn Sie ein selbstsigniertes Zertifikat verwenden, müssen Sie es wahrscheinlich manuell zu Ihrem System hinzufügen.

6voto

xmedeko Punkte 6370

Wenn die Anfrageaufrufe irgendwo tief im Code vergraben sind und Sie das Serverzertifikat nicht installieren wollen, dann sollten Sie nur für nur zur Fehlersuche ist es möglich, Anfragen zu monkeypatchen:

import requests.api
import warnings

def requestspatch(method, url, **kwargs):
    kwargs['verify'] = False
    return _origcall(method, url, **kwargs)

_origcall = requests.api.request
requests.api.request = requestspatch
warnings.warn('Patched requests: SSL verification disabled!')

Niemals in der Produktion verwenden!

5voto

d-coder Punkte 11756

Ich bin wohl zu spät zur Party gekommen, aber ich wollte die Lösung für andere Wanderer wie mich einfügen! Das Folgende hat bei mir unter Python 3.7.x funktioniert

Geben Sie Folgendes in Ihr Terminal ein

pip install --upgrade certifi      # hold your breath..

Versuchen Sie, Ihr Skript/Ihre Anfragen erneut auszuführen, um zu sehen, ob es funktioniert (ich bin sicher, dass es noch nicht behoben ist!). Wenn es nicht funktioniert hat, versuchen Sie, den folgenden Befehl direkt im Terminal auszuführen

open /Applications/Python\ 3.6/Install\ Certificates.command  # please replace 3.6 here with your suitable python version

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