Wie kann ich in Node.js einen HTTP-Server mit HTTPS absichern?
- Vorbereitung der SSL/TLS-Zertifikate
- Ein HTTPS-Server in Node.js erstellen
- Zusätzliche Hinweise
- Zusammenfassung
Um einen HTTP-Server in Node.js mit HTTPS abzusichern, musst du einen HTTPS-Server erstellen, der TLS/SSL-Zertifikate verwendet. Dies sorgt dafür, dass die Kommunikation zwischen dem Server und den Clients verschlüsselt erfolgt und somit vor Lauschangriffen oder Manipulation geschützt ist. Die Grundlage dafür sind die Module https und fs, die in Node.js integriert sind.
Vorbereitung der SSL/TLS-Zertifikate
Damit ein Server HTTPS unterstützen kann, benötigt man ein SSL/TLS-Zertifikat und den dazugehörigen privaten Schlüssel. Für Entwicklungszwecke kann man selbstsignierte Zertifikate erzeugen, für den produktiven Einsatz sollte man aber Zertifikate von einer vertrauenswürdigen Zertifizierungsstelle verwenden.
Um selbstsignierte Zertifikate zu erstellen, kannst du zum Beispiel OpenSSL benutzen. Ein einfacher Befehl hierfür ist:
openssl req -nodes -new -x509 -keyout server.key -out server.certDieser Befehl erzeugt zwei Dateien: server.key (privater Schlüssel) und server.cert (Zertifikat). Beide Dateien sollten in deinem Projektverzeichnis gespeichert werden.
Ein HTTPS-Server in Node.js erstellen
Im Node.js-Skript importierst du zuerst die Module https und fs. Mit fs.readFileSync liest du die Zertifikat- und Schlüsseldateien ein. Anschließend erstellst du mit https.createServer einen HTTPS-Server, an den du die Zertifikatsdaten als Optionen übergibst. Darin definierst du auch, wie der Server auf Anfragen reagieren soll.
Hier ein Beispielcode, der zeigt, wie das in der Praxis aussehen kann:
const https = require(https);const fs = require(fs);const options = { key: fs.readFileSync(server.key), cert: fs.readFileSync(server.cert)};const server = https.createServer(options, (req, res) => { res.writeHead(200, { Content-Type: text/plain }); res.end(Hallo, sicherer HTTPS-Server!);});server.listen(443, () => { console.log(HTTPS-Server läuft auf Port 443);});In diesem Beispiel reagiert der Server auf jede Anfrage, indem er eine einfache Textnachricht zurücksendet. Der Server lauscht auf Port 443, der Standardport für HTTPS.
Zusätzliche Hinweise
Es ist oft sinnvoll, parallel einen HTTP-Server auf Port 80 zu betreiben, der alle Anfragen automatisch auf HTTPS weiterleitet, um sicherzustellen, dass Benutzer immer die verschlüsselte Verbindung nutzen. Das kann man erreichen, indem man einen weiteren Server erstellt und in dessen Anfragen eine Weiterleitung via HTTP-Statuscode 301 (Moved Permanently) auf die HTTPS-Adresse einrichtet.
Außerdem solltest du bei der Verwendung von selbstsignierten Zertifikaten beachten, dass Browser Warnungen anzeigen, da diese Zertifikate nicht automatisch als vertrauenswürdig eingestuft werden. Im produktiven Betrieb nutzt du Zertifikate von Anbietern wie Lets Encrypt, die kostenlos und automatisch erneuert werden können.
Zusammenfassung
Ein HTTPS-Server in Node.js benötigt Zertifikatsdaten, die du über die Optionen beim Erstellen des Servers einliest. Mit dem Modul https kannst du dann einen Server starten, der verschlüsselte HTTP-Verbindungen ermöglicht. So stellst du sicher, dass die Kommunikation sicher abläuft und deine Nutzer geschützt sind.
