Ich habe restify.js anstelle von express.js verwendet, aber die Idee ist dieselbe. Hier ist, wie ich einen node.js-Server einrichte, der sowohl HTTP als auch HTTPS akzeptiert. Qugstart.com/blog/node-js/…
Siehe die offizielle Express-Antwort unten von @Jacob Marble.
Clayzermk1
21
Dieses Beispiel funktioniert nicht mehr, da die HTTPS-Implementierung in Node.JS 0.4 erneut durchgeführt wurde. Siehe die entsprechenden Dokumente unter nodejs.org. stackoverflow.com/questions/5136353/…
Scottyab
11
Diese Antwort ist sehr alt und funktioniert nicht mehr. Bitte sehen Sie die Antwort von pkyeck unten, oder gehen Sie zu: nodejs.org/api/https.html
var express = require('express');var https = require('https');var http = require('http');var fs = require('fs');// This line is from the Node.js HTTPS documentation.var options ={
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.cert')};// Create a service (the app object is just a callback).var app = express();// Create an HTTP service.
http.createServer(app).listen(80);// Create an HTTPS service identical to the HTTP service.
https.createServer(options, app).listen(443);
Schön, wollte das gerade selbst posten. Vielen Dank. Außerdem fand ich diesen Artikel hilfreich, um ein selbstsigniertes Zertifikat zu erstellen.
Clayzermk1
1
Stellen Sie sicher, dass Sie optionszuerst https.createServereingeben, um kryptische Fehler zu vermeiden.
Wberry
1
Ich richte einen fast identischen https-Server-Port 8888 ein und bin mir nicht sicher, wie ich die Routen ändern soll. Wenn ich curl curl ausführe - unsicherer localhost: 8888 curl: (35) Unbekannter SSL-Protokollfehler in Verbindung mit localhost: 8888, woher kommt der Fehler und wie kann man ihn umgehen? Wenn ich localhost: 8888 in den Browser eingebe, hängt es und https: / localhost: 8888 gibt SSL-Fehler
@ NathanMcKaskle Sie können das Passwort deaktivieren: Überprüfen Sie diese Anleitung, aber wenn Sie macOS verwenden, stellen Sie sicher, dass die generierte Schlüssellänge mindestens 2048 ist:openssl genrsa -out key.pem 2048
Sakisk
87
Diese Frage wurde beim Googeln von "node https" gefunden, aber das Beispiel in der akzeptierten Antwort ist sehr alt - aus den Dokumenten der aktuellen (v0.10) Version von node sollte es folgendermaßen aussehen:
Lief wie am Schnürchen. Diese Informationen waren sehr nützlich, als ich ein node.js-Tool (PDFJS) auf einer PHP-App ausführte, die kürzlich gezwungen war, über https zu laufen. Der iframe war sehr unglücklich, meine node.js-App auf einen alternativen Nicht-https-Port zu laden.
lewsid
2
Das sieht gut aus, aber wie kann ich die Dateien generieren, die Sie dort benötigen ( *.pem)? Ich habe versucht, dieser Seite zu folgen , aber beim Öffnen localhost:8000im Browser werden keine Daten empfangen (nur Laden ...).
Ionică Bizău
7
@ IonicăBizău, um Schlüssel zu generieren, installieren openssl, dann in cmd Eingabeaufforderung openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3001
eingeben
2
@ IonicăBizău müssen Sie direkt zu gehen https://localhost:8080. HTTP ist NICHT HTTPS.
Florian Wendelborn
Ist es möglich, einen https-Server mit Ordner zu erstellen? Sie können also eine Datei einfügen
FrenkyB
47
Die obigen Antworten sind gut, aber mit Express und Node funktioniert dies einwandfrei.
Da Express die App für Sie erstellt, überspringe ich das hier.
Ich habe festgestellt, dass keine dieser Antworten das Hinzufügen einer Zwischenstammzertifizierungsstelle zur Kette zeigt. Hier sind einige Beispiele für die Nullkonfiguration, mit denen Sie spielen können, um Folgendes zu sehen:
var options ={// this is the private key only
key: fs.readFileSync(path.join('certs','my-server.key.pem'))// this must be the fullchain (cert + intermediates), cert: fs.readFileSync(path.join('certs','my-server.crt.pem'))// this stuff is generally only for peer certificates//, ca: [ fs.readFileSync(path.join('certs', 'my-root-ca.crt.pem'))]//, requestCert: false};var server = https.createServer(options);var app = require('./my-express-or-connect-app').create(server);
server.on('request', app);
server.listen(443,function(){
console.log("Listening on "+ server.address().address +":"+ server.address().port);});var insecureServer = http.createServer();
server.listen(80,function(){
console.log("Listening on "+ server.address().address +":"+ server.address().port);});
Dies ist eines der Dinge, die oft einfacher sind, wenn Sie nicht versuchen, es direkt über Connect oder Express zu tun, sondern den Eingeborenen lassenhttps Modul damit umgehen lassen und es dann verwenden, um Ihre Connect / Express-App zu bedienen.
Wenn Sie server.on('request', app)die App beim Erstellen des Servers verwenden, anstatt sie zu übergeben, haben Sie die Möglichkeit, die serverInstanz an eine Initialisierungsfunktion zu übergeben, mit der die Connect / Express-App erstellt wird (falls Sie dies möchten) WebSockets über ssl auf dem gleichen Server, für Beispiel).
Dies ist eine nette Erklärung, aber der bereitgestellte Link im Update-Bereich ist defekt (gibt 500 Fehler)
Chucky
8
Damit Ihre App für beide hören httpund httpsauf Ports 80und 443jeweils, folgendermaßen
Erstellen Sie eine Express-App:
var express = require('express');var app = express();
Die von zurückgegebene App express()ist eine JavaScript-Funktion. Es kann als Rückruf zur Bearbeitung von Anforderungen an die HTTP-Server von Node übergeben werden. Dies macht es einfach, sowohl HTTP- als auch HTTPS-Versionen Ihrer App mit derselben Codebasis bereitzustellen.
Erstellen Sie die Datei openssl.cnf und laden Sie deren Inhalt herunter von: http://web.mit.edu/crypto/openssl.cnf
openssl.cnf kann an einer beliebigen Stelle abgelegt werden, aber der Pfad sollte korrekt sein, wenn wir die Eingabeaufforderung eingeben.
Öffnen Sie den Befehl propmt und setzen Sie den Pfad openssl.cnf C: \ set OPENSSL_CONF = d: /openssl.cnf. 5. Führen Sie dies in cmd aus: C: \ openssl-0.9.8r-i386-win32-rev2> openssl.exe
Führen Sie dann OpenSSL> genrsa -des3 -out server.enc.key 1024 aus
Dann werden Sie nach Passphrasen gefragt: Geben Sie 4 bis 11 Zeichen als Passwort für das Zertifikat ein
Führen Sie dann diese Option aus. Öffnen> req -new -key server.enc.key -out server.csr
Dann werden Sie nach einigen Details wie dem Ländercode, dem Namen des Bundesstaates usw. gefragt. Füllen Sie diese frei aus. 10. Führen Sie dann Openssl> rsa -in server.enc.key -out server.key aus
Führen Sie diese OpenSSL> x509 -req -days 365 -in server.csr -signkey server.key -out server.crt aus und verwenden Sie dann den vorherigen Code, der sich im Stapelüberlauf befindet. Danke
Antworten:
Ich habe folgendes Beispiel gefunden.
https://web.archive.org/web/20120203022122/http://www.silassewell.com/blog/2010/06/03/node-js-https-ssl-server-example/
Dies funktioniert für den Knoten v0.1.94 - v0.3.1.
server.setSecure()
wird in neueren Versionen von Node entfernt.Direkt aus dieser Quelle:
quelle
setSecure
ist veraltet. Überprüfen Sie dies stattdessen stackoverflow.com/questions/5136353/node-js-https-secure-errorDas Express API-Dokument beschreibt dies ziemlich deutlich.
Zusätzlich enthält diese Antwort die Schritte zum Erstellen eines selbstsignierten Zertifikats.
Ich habe einige Kommentare und einen Ausschnitt aus der HTTPS-Dokumentation von Node.js hinzugefügt :
quelle
options
zuersthttps.createServer
eingeben, um kryptische Fehler zu vermeiden.openssl genrsa -out key.pem 2048
Diese Frage wurde beim Googeln von "node https" gefunden, aber das Beispiel in der akzeptierten Antwort ist sehr alt - aus den Dokumenten der aktuellen (v0.10) Version von node sollte es folgendermaßen aussehen:
quelle
*.pem
)? Ich habe versucht, dieser Seite zu folgen , aber beim Öffnenlocalhost:8000
im Browser werden keine Daten empfangen (nur Laden ...).openssl
, dann in cmd Eingabeaufforderungopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3001
https://localhost:8080
. HTTP ist NICHT HTTPS.Die obigen Antworten sind gut, aber mit Express und Node funktioniert dies einwandfrei.
Da Express die App für Sie erstellt, überspringe ich das hier.
quelle
module.exports
? Das ist nicht nötigDas minimale Setup für einen HTTPS-Server in Node.js wäre ungefähr so:
Wenn Sie auch http-Anfragen unterstützen möchten, müssen Sie nur diese kleine Änderung vornehmen:
quelle
Aktualisieren
Verwenden Sie Let's Encrypt über Greenlock.js
Ursprünglicher Beitrag
Ich habe festgestellt, dass keine dieser Antworten das Hinzufügen einer Zwischenstammzertifizierungsstelle zur Kette zeigt. Hier sind einige Beispiele für die Nullkonfiguration, mit denen Sie spielen können, um Folgendes zu sehen:
Snippet:
Dies ist eines der Dinge, die oft einfacher sind, wenn Sie nicht versuchen, es direkt über Connect oder Express zu tun, sondern den Eingeborenen lassen
https
Modul damit umgehen lassen und es dann verwenden, um Ihre Connect / Express-App zu bedienen.Wenn Sie
server.on('request', app)
die App beim Erstellen des Servers verwenden, anstatt sie zu übergeben, haben Sie die Möglichkeit, dieserver
Instanz an eine Initialisierungsfunktion zu übergeben, mit der die Connect / Express-App erstellt wird (falls Sie dies möchten) WebSockets über ssl auf dem gleichen Server, für Beispiel).quelle
Damit Ihre App für beide hören
http
undhttps
auf Ports80
und443
jeweils, folgendermaßenErstellen Sie eine Express-App:
Die von zurückgegebene App
express()
ist eine JavaScript-Funktion. Es kann als Rückruf zur Bearbeitung von Anforderungen an die HTTP-Server von Node übergeben werden. Dies macht es einfach, sowohl HTTP- als auch HTTPS-Versionen Ihrer App mit derselben Codebasis bereitzustellen.Sie können dies wie folgt tun:
Ausführliche Informationen finden Sie im Dokument
quelle
Sie können dies auch mit dem Fastify-Framework archivieren:
(und ausführen
openssl req -nodes -new -x509 -keyout server.key -out server.cert
, um die Dateien zu erstellen, wenn Sie Tests schreiben müssen)quelle
quelle