
Ich führe mein Django-Backend auf meinem lokalen Computer aus und versuche, eine Verbindung dazu herzustellen mit HTTPie
(https://httpie.org/).
Beim Ausführen python manage.py runsslserver
erhalte ich diese Ausgabe:
Starting development server at https://127.0.0.1:8000/
Using SSL certificate: //anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt
Using SSL key: //anaconda/lib/python3.6/site-packages/sslserver/certs/development.key
Quit the server with CONTROL-C.
Wenn ich versuche, eine Verbindung zum lokalen Host herzustellen, indem ich dieses Zertifikat und diesen Schlüssel verwende,die Dokumentation:
http --cert=//anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt --cert-key=//anaconda/lib/python3.6/site-packages/sslserver/certs/development.key https://127.0.0.1:8000/
Ich erhalte einen fehlerhaften Handshake-Fehler:
http: error: SSLError: ("bad handshake: Error([('SSL
routines','ssl3_get_server_certificate', 'certificate verify
failed')],)",) while doing GET request to URL: https://127.0.0.1:8000/
Warum wird keine Verbindung hergestellt?
Antwort1
http
Basierend auf der von Ihnen verlinkten HTTPie-Dokumentation scheint es, dass Sie den Befehl nicht richtig verwenden . Die von Ihnen angegebenen Optionen --cert
und -cert-key
dienen der Client-Zertifikatauthentifizierung (beispielsweise anstelle eines API-Tokens). Ich kann nicht sicher sein, aber ich vermute, dass Sie keine Client-Zertifikatauthentifizierung verwenden.
Vorausgesetzt, Sie haben eineselbstsigniertes SSL-ZertifikatBei //anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt
haben Sie zwei Hauptoptionen:
Behandeln Sie das selbstsignierte Zertifikat als Zertifizierungsstelle
Notiz: Sie sollten sicherstellen, dass Sie über das richtige Zertifikat verfügen, da Sie sonst dieselben Probleme wie bei der zweiten Option unten riskieren.
http --verify=//anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt https://127.0.0.1:8000/
oder, mit wget
oder curl
:
curl --cacert //anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt https://127.0.0.1:8000/
wget --ca-certificate=//anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt https://127.0.0.1:8000/
SSL-Validierung überspringen
Notiz:Diese Methode wird immer nochVerschlüsselnIhre Daten, aber unternehmen Sie keinen Versuch,authentifizierender Remote-Endpunkt (d. h. Sie könnten Daten verschlüsseln und an einen Angreifer senden). Daher ist diesNICHT EMPFOHLEN für den Produktionseinsatz.
http --verify=no https://127.0.0.1:8000/
Beachten Sie auch, dass es andere, häufiger verwendete Befehlszeilen-HTTP-Clients gibt:
curl -k https://127.0.0.1:8000/
wget --no-check-certificate https://127.0.0.1:8000/
Lass uns verschlüsseln
Schließlich könnten Sie über die Anschaffung eines gültigen SSL-Zertifikats nachdenken.Lass uns verschlüsselnbietet sie kostenlos an, und es gibt viele andere CAs, die Sie in Betracht ziehen könnten, wenn Sie jemandem etwas bezahlen möchten. Mit einem gültigen SSL-Zertifikat (und einem gültigen DNS-Namen) sollten bei keinem der genannten Clients zusätzliche Optionen erforderlich sein.