Es ist nicht so einfach wie der eingebaute Entwicklungsserver, aber es ist nicht allzu schwierig, mit stunnel als SSLifying-Vermittler zwischen Ihrem Browser und dem Entwicklungsserver etwas in die Nähe zu bringen. Mit Stunnel können Sie einen kompakten Server auf Ihrem Computer einrichten, der Verbindungen an einem konfigurierten Port akzeptiert, sie mit SSL umschließt und an einen anderen Server weiterleitet. Wir werden dies verwenden, um einen Stunnel-Port (8443) zu öffnen und den empfangenen Datenverkehr an eine Django-Runserver-Instanz weiterzuleiten.
Zuerst benötigen Sie einen Stunnel, der hier heruntergeladen oder vom Paketsystem Ihrer Plattform bereitgestellt werden kann (z apt-get install stunnel. B. :) . Ich werde Version 4 von stunnel verwenden (zB: /usr/bin/stunnel4unter Ubuntu), Version 3 wird ebenfalls funktionieren, hat aber verschiedene Konfigurationsoptionen.
Erstellen Sie zunächst ein Verzeichnis in Ihrem Django-Projekt, in dem die erforderlichen Konfigurationsdateien und SSLish-Inhalte gespeichert sind.
mkdir stunnel
cd stunnel
Als Nächstes müssen wir ein lokales Zertifikat und einen Schlüssel erstellen, die für die SSL-Kommunikation verwendet werden sollen. Dazu wenden wir uns an openssl.
Erstellen Sie den Schlüssel:
openssl genrsa 1024 > stunnel.key
Erstellen Sie das Zertifikat, das diesen Schlüssel verwendet (hier werden Sie nach einer Reihe von Informationen gefragt, die im Zertifikat enthalten sind - antworten Sie einfach mit dem, was sich für Sie gut anfühlt):
openssl req -new -x509 -nodes -sha1 -days 365 -key stunnel.key > stunnel.cert
Kombinieren Sie diese nun zu einer einzigen Datei, die stunnel für die SSL-Kommunikation verwendet:
cat stunnel.key stunnel.cert > stunnel.pem
Erstellen Sie eine Konfigurationsdatei für stunnel mit dem Namen dev_https mit den folgenden Inhalten:
pid=
cert = stunnel/stunnel.pem
sslVersion = SSLv3
foreground = yes
output = stunnel.log
[https]
accept=8443
connect=8001
TIMEOUTclose=1
Diese Datei sagt stunnel, was es wissen muss. Insbesondere weisen Sie es an, keine PID-Datei zu verwenden, in der sich die Zertifikatdatei befindet, welche SSL-Version verwendet werden soll, die im Vordergrund ausgeführt werden soll, in der die Ausgabe protokolliert werden soll und die Verbindung am Port akzeptiert werden soll 8443 und bringen Sie sie zu Port 8001. Der letzte Parameter (TIMEOUTclose) weist ihn an, die Verbindung automatisch zu schließen, nachdem 1 Sekunde ohne Aktivität vergangen ist.
Kehren Sie nun zu Ihrem Django-Projektverzeichnis zurück (das mit der Datei "manage.py"):
cd ..
Hier erstellen wir ein Skript namens runserver, auf dem stunnel und zwei Django-Entwicklungsserver ausgeführt werden (einer für normale Verbindungen und einer für SSL-Verbindungen):
stunnel4 stunnel/dev_https &
python manage.py runserver&
HTTPS=1 python manage.py runserver 8001
Lassen Sie uns dies Zeile für Zeile aufschlüsseln:
- Zeile 1: Startet den Stunnel und zeigt auf die gerade erstellte Konfigurationsdatei. Dies hat Stunnel Listen auf Port 8443, umschließt alle Verbindungen, die es empfängt, in SSL und leitet sie an Port 8001 weiter
- Zeile 2: Startet eine normale Django-Runserver-Instanz (auf Port 8000).
- Zeile 3: Startet eine andere Django-Runserver-Instanz (auf Port 8001) und konfiguriert sie so, dass alle eingehenden Verbindungen so behandelt werden, als würden sie mit HTTPS ausgeführt.
Machen Sie die gerade erstellte Runscript-Datei ausführbar mit:
chmod a+x runserver
Wenn Sie jetzt Ihren Entwicklungsserver ausführen möchten, führen Sie ihn einfach ./runserveraus Ihrem Projektverzeichnis aus. Zeigen Sie zum Ausprobieren einfach Ihren Browser auf http: // localhost: 8000 für normalen HTTP-Verkehr und https: // localhost: 8443 für HTTPS-Verkehr. Beachten Sie, dass sich Ihr Browser mit ziemlicher Sicherheit über das verwendete Zertifikat beschwert und Sie dazu auffordert, eine Ausnahme hinzuzufügen oder den Browser anderweitig ausdrücklich anzuweisen, mit dem Surfen fortzufahren. Dies liegt daran, dass Sie Ihr eigenes Zertifikat erstellt haben und der Browser nicht darauf vertraut, dass er die Wahrheit darüber sagt, wer es ist. Dies ist gut für die Entwicklung, wird es aber offensichtlich nicht für die Produktion schneiden.
Leider wird dieses Runserver-Skript auf meinem Computer nicht gut beendet, wenn ich Strg-C drücke. Ich muss die Prozesse manuell beenden - hat jemand einen Vorschlag, um das zu beheben?
Vielen Dank an Michael Giles Beitrag und den Wiki-Eintrag von Django-Weave für das Referenzmaterial.