schlechter Handshake-Fehler mit HTTPIE-SSL-Zertifikaten

schlechter Handshake-Fehler mit HTTPIE-SSL-Zertifikaten

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 runsslservererhalte 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

httpBasierend auf der von Ihnen verlinkten HTTPie-Dokumentation scheint es, dass Sie den Befehl nicht richtig verwenden . Die von Ihnen angegebenen Optionen --certund -cert-keydienen 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.crthaben 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 wgetoder 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.

verwandte Informationen