[MUSIK]
In der vorangegangenen Vorlesung haben wir über HTTPS erfahren und wie sie eine
sichere Kommunikation zwischen Client und Server durchführen können.
Wir haben auch ein wenig über Kryptografie gelernt,
genug, um zu verstehen, wie HTTPS funktioniert.
Damit wir unseren HTTP-Server konfigurieren können,
müssen wir einen öffentlichen Schlüssel und ein Zertifikat erhalten.
Wir werden nun unseren ConFusion-Server so konfigurieren, dass er HTTPS in dieser Übung verwendet.
Also, lassen Sie uns vorwärts gehen, zuerst den Schlüssel und
das Zertifikat zu generieren, das wir für unseren Server verwenden können und
dann unsere Express-Anwendung ändern, um HTTPS zu unterstützen.
Um mit dieser Übung zu beginnen, gehen Sie zum ConFusion-Serverordner.
Und dann in Ihrem Terminal- oder Befehlsfenster und
gehen Sie dann in den bin-Ordner innerhalb des ConFusion-Serverordners.
Und im Ordner bin sehen Sie eine Datei namens www.
Dies ist der Ordner, in dem wir unseren privaten Schlüssel generieren und
dann auch das Zertifikat für
unseren HTTPS-Server mit einem Kommandozeilentool namens OpenSSL generieren werden.
Jetzt wird OpenSSL normalerweise standardmäßig auf Mac OS-Maschinen installiert.
Auf Windows-Computern müssen Sie OpenSSL möglicherweise explizit herunterladen und installieren.
Jetzt habe ich ein paar Links in den Anweisungen zur Verfügung gestellt, damit Sie
OpenSSL holen können.
Ich habe Ihnen auch eine Website zur Verfügung gestellt, auf der Sie selbstsignierten privaten
Schlüssel und Zertifikat generieren können.
Also lassen Sie uns gehen und einen kurzen Blick darauf werfen.
Wenn Sie einen Windows-Rechner ausführen und
OpenSSL noch nicht installiert ist.
Dann bietet dieser Link Binärdateien für
OpenSSL, die Sie herunterladen und auf Ihrem Windows-Computer installieren können.
Dieser Link ist also in den Anweisungen für diese Übung enthalten. Wenn Sie
also dort reingehen,
finden Sie mehrere Downloads von
OpenSSL-bezogenen Distributionen von Drittanbietern, die Sie herunterladen und auf Ihrem Computer installieren können.
Installieren Sie also eines davon, um
mit dieser Übung fortzufahren, wenn Sie OpenSSL nicht bereits auf Ihrem Computer haben.
Nun auch, wenn Sie eine andere Möglichkeit haben,
Ihren privaten Schlüssel und Ihr Zertifikat zu generieren.
Hier ist ein Blog-Artikel, ein Link, auf den ich bereits in der Anleitung angegeben habe
, der auch erklärt, wie Sie Ihren Windows-Rechner mit
OpenSSL einrichten und auch den privaten Schlüssel und das Zertifikat generieren.
Gehen Sie also durch diese Schritte, um Ihren Windows-Computer zum
Generieren des privaten Schlüssels und Zertifikats zu konfigurieren.
Nun, wenn Sie OpenSSL nicht installieren möchten, dann ist hier ein Link
zu einer Website, die es Ihnen erlaubt,
dort selbstsigniertes SSL-Zertifikat und Schlüssel zu generieren, wie Sie hier sehen.
Ein Link zu dieser Seite ist also auch in der Anleitung enthalten.
So können Sie den Server verwenden, um das SSL-Zertifikat und den
Schlüssel für Ihre Windows-Maschine zu generieren.
Jeder dieser Ansätze kann also zum
Generieren des privaten Schlüssels und des Zertifikats für Ihren Windows-Computer verwendet werden.
Da ich auf einer OSX-Maschine laufe,
werde ich meinen privaten Schlüssel und mein Zertifikat mit OpenSSL generieren.
Also gehen Sie zum Terminal, lassen Sie mich openssl genrsa
1024 eingeben, was bedeutet, dass ich einen privaten Schlüssel der Größe 1024 generieren werde.
Also werde ich dies in eine Datei mit dem Namen privaten Schlüssel einfügen, und
sobald dies generiert wird, werden wir die entsprechende cert.csr-Datei generieren,
so dass es openssl req Anfrage sagen wird.
Wir fordern also ein neues Zertifikat
mit dem Schlüssel private.key an, und es wird das generieren.
Cert.CSR hier.
Nun, wenn Sie die cert.csr generieren, wird es mit ein paar Fragen kommen, die
Sie ausfüllen können.
Sie können die Standardwerte übernehmen oder
eigene Werte eingeben, wenn Sie dies gewählt haben.
Es spielt keine Rolle, weil dieses Zertifikat, das wir nur innerhalb unseres
Computers verwenden, um unseren HTTPS-Server zu testen.
Also, lassen Sie mich einige Details ausfüllen.
Ich lasse ein paar Dinge leer.
Und das würde gut funktionieren,
es spielt keine Rolle, ob Sie diese Informationen eingeben oder nicht.
Sobald Sie also tun, dass Ihre cert.csr generiert wird und
daraus wird das Verteilungszertifikat generiert, so
dass wir an der Eingabeaufforderung
openssl x509 -req -in cert.csr -signkey
private.key out certificate.pem eingeben.
Dies wird also das Zertifikat für
uns generieren, und
wenn Sie diese Schritte ausführen,
werden Sie sehen, dass Sie die private.key,
die cert.csr und certificate.pem darin haben.
Dies wird für die Konfiguration unseres HTTPS-Servers benötigt.
Also, jetzt, um HTTPS-Server zu konfigurieren, gehen wir zu unserem Editor.
Im Editor gehen wir hier zu diesem bin-Ordner.
Und im Ordner bin sehen Sie diese Datei namens www.
Wir haben uns diese Datei in einer der früheren Übungen kurz angesehen.
Nun, wenn wir in diese Datei
gehen, werden wir jetzt auch das HTTPS-Kernmodul importieren, so dass
wir sagen, HTTPS erfordert HTTPS und
wir werden auch das Dateisystemmodul benötigen.
Sie haben das Dateisystemmodul bereits früher
in einer der Übungen gefunden.
Also werden wir beide importieren.
Und dann, wenn wir hier unten gehen, werden wir die Portnummer konfigurieren, an der unser
HTTPS-Server läuft, also sagen wir app.set und
wir sagen SecPort.
Also werden wir hier eine Variable einrichten, die Secure Port genannt wird, und
dann werde ich dies auf Port+443 initialisieren.
Warum verwende ich diesen Port+443?
Wenn Ihr Server auf einem Standardserver als Webserver fungiert,
wird Ihr HTTP-Protokoll an der Portnummer 80 auf Ihrem Server ausgeführt.
Und das sichere HTTP wird auf Portnummer 443 ausgeführt.
Nun möchten Sie normalerweise nicht diese reservierten Ports
in einer Entwicklungsanwendung verwenden, aber wir tun in diesem Kurs.
Stattdessen
hatten wir, wie Sie bereits gesehen haben, unsere Portnummer auf 3000 konfiguriert, wo unser HTTP-Server läuft.
Also werde ich den HTTPS-Server unter Portnummer 3443 ausführen.
Also 3000 plus 443.
Das ist der Grund, warum ich diesen sicheren Port deklariere.
Als Port+443, so wird unser HTTPS-Server an Port Nummer 443 laufen.
Ich werde immer noch den HTTP-Server an Port 3000 betreiben,
wir haben bereits den HTTP-Server hier im WWW erstellt, oder besser gesagt,
dieser wird automatisch vom Express-Generator generiert.
Da der HTTP-Server bereits konfiguriert ist,
konfigurieren wir nun den HTTPS-Server.
So konfigurieren Sie den HTTPS-Server, gleich nachdem wir den HTTP-Server konfigurieren.
Nun der Grund, warum ich den HTTP-Server immer noch ausführen werde, ist, dass,
wenn ich eine Anfrage am Port des HTTP-Servers erhalte,
diese Anfrage an den HTTPS-Server umgeleitet wird.
Mein Server wird also nur Serviceanfrage auf den HTTPS-Ports eingehen.
Aber wenn zufällig jemand auf den Server am HTTP-Port zugreift,
werde ich diese Anfrage an den HTTPS-Port umleiten. Das
werden wir ein wenig später machen.
Lassen Sie uns zunächst HTTPS-Server konfigurieren.
Um also den HTTPS-Server zu konfigurieren,
werde ich hier ein paar Optionen für meinen HTTPS-Server deklarieren. Denken Sie
nun daran, dass wir für einen HTTPS-Server den privaten Schlüssel und
das Zertifikat konfigurieren müssen, das mein HTTPS-Server verwenden wird.
Also in den Optionen werde ich Schlüssel angeben und
dann werde ich das Dateisystem verwenden und dann werde ich sagen, ReadFileSync.
Also werde ich diese Datei synchron lesen, damit ich die Datei vollständig einlesen werde,
bevor ich meinen HTTPS-Server konfigurieren kann.
Also werde ich diese Datei von __dirname lesen.
Sie wissen bereits, warum ich __dirname aus den vorherigen
Übungen benutze, bei denen wir sahen, dass die fünf Systemmodule verwendet wurden.
Und dann, also werde ich __dirname+ sagen.
Also hier liefern wir den Pfad zur private.key.
Nun erinnern Sie sich, dass sich diese www im Ordner bin befindet.
Und die private.key ist auch im bin-Ordner,
deshalb werde ich dirname+ sagen, also wird dies
dem Dateisystem-Lesemodul angeben, dass die Datei
aus diesem bin-Verzeichnis gelesen werden soll, aus dieser private.key Datei hier.
Jetzt werden wir auch das Zertifikat hier lesen.
Also sagen wir, Zertifikat fs.readFileSync.
So wird es synchron Datei lesen, was bedeutet, dass
die Datei vollständig gelesen wird, bevor Sie mit diesem nächsten Schritt hier fortfahren.
Und die Datei, die wir lesen müssen, ist auch __dirname+.
Und wir werden sagen, /certificate.pem, die wir früher generiert haben.
Und das sollte ein Komma sein, und ich sollte kein Semikolon dort setzen,
weil dies ein JavaScript-Objekt ist, das wir definiert haben, die Optionen hat.
Also, sobald wir das JavaScript-Objekt definieren, dann lassen Sie uns den sicheren Server konfigurieren.
Also sagen wir var SecureServer https.
Daran erinnern, dass wir jetzt https verwenden werden, und dann sagen wir CreateServer.
Also erinnern Sie sich, dass wir für HTTP unseren Server hier so konfiguriert haben.
Für den sicheren Server, werden wir, um das zu schaffen, indem wir sagen,
var SecureServer https.CreateServer, und dann werden wir
die Optionen, die wir gerade konfiguriert haben, und dann der zweite Teil ist App hier.
Mein SecureServer ist also gut und
wird auch für meine App verfügbar sein.
Jetzt unten hier unten, werde ich
die SecureServer konfigurieren.Hören Sie auf Portnummer,
SecPort. Daran
erinnern, dass wir hier einen app.set SecPort gemacht hatten, also
setzen wir diesen Wert hier auf die sichere Portnummer.
Und dann unten hier unten sagen wir app.get.
Das bedeutet also, dass dieser Wert, den wir
früher konfiguriert haben,
uns zur Verfügung stehen wird, um unseren Listening-Port für
unseren Server, app.get SecPort, und
dann liefern Sie die, Callback-Funktion hier.
Und innerhalb dieser Callback-Funktion werden wir sagen,
console.log Server auf Port lauschen.
Lassen Sie uns sicheren Server hören auf Port
Und dann, sobald wir den SecureServer konfigurieren,
dann müssen wir, Siehe, SecureServer auf.
Wenn also der SecureServer ein Fehlerereignis empfängt,
dann werden wir den OnError, der unten konfiguriert ist, mögen, um das zu behandeln.
Und dann sagen wir, SecureServer.on.
Hören, also, wenn Sie das hörende Ereignis erhalten,
dann rufen wir das OnListening an.
Wo sind diese OnError und OnListening konfiguriert?
Wenn Sie hier unten in den Code gehen, hier unten.
Sie geben diese beiden Funktionen an, die OnError hier funktionieren,
und dann die OnListening Funktion hier.
Also werden wir diese beiden Funktionen verwenden, um unseren Server hier zu konfigurieren.
Mit diesen Änderungen
ist mein Server nun so konfiguriert, dass er auch den SecureServer unter Portnummer 443 läuft.
Wir haben hier bereits den Standard-HTTP-Server konfiguriert.
Sobald wir diese beiden gemacht haben, wird unser nächstes Update in der Datei app.js sein.
Also gehe ich zur Datei app.js Was ich tun werde, ist, diesen
Server so zu konfigurieren, dass er jeden Datenverkehr umleitet, der an den unsicheren Port kommt.
Das ist Portnummer 3.000, es wird diese Anfrage an den sicheren Port umleiten.
Um dies zu tun, lassen Sie mich eine Middleware einrichten, direkt nachdem wir die app.express deklariert haben.
Also hier werden wir sagen, app.all, was bedeutet, für
alle Anfragen, egal wie der Pfad in der Anfrage ist.
Eigene Anfrage kommt in, ich werde das umleiten zu,
Also sagen wir rec, res, next, und
die Rückruffunktion, die hier definiert wird.
Und so werden wir, Deklarieren Sie die Funktion hier drin.
Und wir werden sagen, wenn req.secure.
Also, wenn die eingehende Anfrage bereits eine sichere Anfrage ist,
woher wissen wir das?
Wenn die eingehende Anforderung bereits eine sichere Anforderung ist, dann
wird das Anforderungsobjekt dieses Flag namens secure tragen, das bereits auf true gesetzt ist.
Wenn die eingehende Anforderung überhaupt nicht sicherer Port
ist, sondern stattdessen an den unsicheren Port kommt, dann wird die write.secure nicht gesetzt.
Also, darum kümmere ich mich.
Wenn es bereits zum sicheren Port kommt, gehe ich einfach voran,
ohne etwas zu tun, weil es bereits zum sicheren Port kommt.
Also kann ich einfach sagen, als nächstes.
Sonst, so werden wir sagen, zurück als Nächstes.
Andernfalls, so wird die sonst auftreten,
Wenn es an den unsicheren Port kommt.
Also in diesem Fall werde ich res.redirect sagen.
So ist die Umleitungsmethode verfügbar,
die die eingehende Anfrage an eine andere URL umleitet.
Also, ich werde diese unsichere Anfrage an https://umleiten.
Also führe ich diese Anfrage an den, req.host-Namen um.
Die Anfrage wird also bereits den Hostnamen tragen.
Also, weil dies auf den gleichen Server kommt, so dass
ich auf den gleichen Server umleiten.
Und dann sagen wir +,
; + app.get.
Nun erinnern Sie sich, dass wir bereits den sicheren Port in der app.get dort konfiguriert hatten.
Also sagen wir app.get SecPort + req.url.
Jetzt enthält diese req.url den Rest des Pfades
außer dem Hostnamen und der Portnummer.
Wenn Sie also einen localhost sagen: 3000,
wird dieser localhost: 3000 vom ersten Teil abgedeckt und
dies wird von dieser Konfiguration hier zu localhost: 3443 umgeleitet.
Und dann, der Rest davon, wird die req.url den tatsächlichen Pfad auf dem Server enthalten.
Also fügen wir es einfach dem Umleitungspfad hinzu, und
dies ist der Pfad, zu dem ich die eingehende Anforderungsnachricht umleiten werde.
Sobald ich die eingehende Anforderungsnachricht umgeleitet habe,
wird meine Anforderungsnachricht an den gesicherten Port umgeleitet.
Und eine letzte Änderung könnte res.redirect,
wir werden den geschriebenen Statuscode als 307 hinzufügen.
307 stellt hier dar, dass sich die Zielressource vorübergehend unter einer
anderen URL befindet.
Und der User-Agent darf die Anforderungsmethode nicht ändern, wenn er
in der automatischen Umleitung zu dieser URL reformiert.
Daher erwarte ich, dass der Benutzeragent
mit der gleichen Methode, die er für den ursprünglichen Endpunkt verwendet hat, erneut versucht.
Das ist es, dass die Änderung, die ich in der Datei app.js vornehmen muss.
Nachdem wir also die app.js und das www geändert haben und
auch den Schlüssel und das Zertifikat generiert
haben, können wir nun die Änderungen speichern und unseren Server starten.
Gehen Sie zum Terminal oder zum Befehlsfenster, stellen Sie sicher, dass Sie sich
wieder in Ihrem ConfusionServer-Ordner befinden, und starten Sie dann den Server.
Also bin ich am Terminal und tippe npm start.
Und Ihr Server wird einsatzbereit sein, und Sie bemerken auch, dass wir
hier ausdrucken und sagen, Secure Server lauschen auf Port Nummer 3443 hier.
Um den sicheren Server zu betonen, gehen Sie hier zu einem Browser wie Chrome.
Und dann, lassen Sie mich zuerst auf den sicheren Server unter
localhost zugreifen: 3443, wo mein sicherer Server läuft.
Und beachten Sie, dass, wenn ich versuchen, die https://localhost3443 im Browser,
es wird mit dieser Nachricht kommen hier sagen, Ihre Verbindung ist nicht privat.
Offensichtlich, weil das Zertifikat, das wir jetzt verwenden,
ein selbstsigniertes Zertifikat ist.
Und dies wird von Chrome nicht als gültiges Zertifikat erkannt.
Aber da wir wissen, was wir tun, ist es in Ordnung für uns zu akzeptieren
, dass wir erlauben werden, zu diesem bestimmten Server weiterzufahren.
Jetzt werde ich Ihnen dringend raten, dies niemals auf
einer Website zu tun, die mit dem Vorschlag kommt.
Wir tun dies speziell in dieser Übung, weil
wir genau wissen, wo der Server ist, und
wir wissen, dass wir den Server explizit selbst konfiguriert haben.
Aber wenn eine andere Website mit dieser Nachricht kommt, würde ich
Ihnen dringend raten, den Vorschlag nicht zu akzeptieren und mit dem Zugriff auf den Server fortzufahren.
So sollten Sie zurück zur Sicherheit springen, wenn Sie jemals dies oder auf einer anderen Website sehen.
Aber da wir wissen, dass dies unser eigener Server ist, gehe ich
hier zum localhost, und dann würden Sie sehen, dass wir auf den Express-Server zugreifen.
Und Sie würden hier oben feststellen
, dass Ihr Browser Ihnen zeigt, dass Sie auf einen unsicheren Server zugreifen.
Wenn Sie darauf klicken, würden Sie die Nachricht
hier sehen, dass Ihre Verbindung zur Website nicht sicher ist.
Aber wir wissen, dass, da wir den Server selbst betreiben, dies in Ordnung ist.
So würden Sie auf den HTTPS-Server zugreifen.
Nun, lassen Sie mich versuchen, auf den gleichen HTTP-Server zuzugreifen, aber lassen Sie mich auf die,
Standard localhost: 3000 zugreifen.
Hier läuft unser unsicherer Server zum normalen HTTP-Server.
Wenn ich also versuche, auf diesen HTTP localhost zuzugreifen: 3000 zuzugreifen,
dann sehen Sie sofort, dass mein Server mich zum sicheren Server umleitet.
So stellen Sie Ihren Server, den wir gerade konfigurieren
, sicher, dass Sie immer auf den Server über seinen sicheren Port zugreifen.
Dies garantiert auch die Tatsache, dass beim Austausch,
beim Senden Ihrer Anmeldeinformationen usw.
der gesamte Austausch der Anmeldeinformationen in der Kopfzeile der Nachricht gewährleistet ist.
Und auch wenn Sie sich mit der lokalen Authentifizierung anmelden, alles, was
auf sichere Weise in einem verschlüsselten Kanal zwischen Ihrem Client und dem Server geschieht.
Nun haben wir unseren Server so konfiguriert, dass er ein sicherer HTTPS-Server ist.
Damit schließen wir diese Übung ab.
In dieser Übung haben wir gelernt, wie Sie einen sicheren HTTP-Server konfigurieren oder
das HTTPS-Protokoll verwenden.
Damit schließen wir diese Übung ab.
Dies ist ein guter Zeitpunkt für Sie, ein Git-Commit mit der Nachricht HTTPS zu machen.
( MUSIK)