Ich versuche, HTTPS für Express.js für Node zum Laufen zu bringen, und ich kann es nicht herausfinden.
Das ist mein app.js
Code.
var express = require('express');
var fs = require('fs');
var privateKey = fs.readFileSync('sslcert/server.key');
var certificate = fs.readFileSync('sslcert/server.crt');
var credentials = {key: privateKey, cert: certificate};
var app = express.createServer(credentials);
app.get('/', function(req,res) {
res.send('hello');
});
app.listen(8000);
Wenn ich es ausführe, scheint es nur auf HTTP-Anfragen zu antworten.
Ich habe eine einfache Vanille- node.js
basierte HTTPS-App geschrieben:
var fs = require("fs"),
http = require("https");
var privateKey = fs.readFileSync('sslcert/server.key').toString();
var certificate = fs.readFileSync('sslcert/server.crt').toString();
var credentials = {key: privateKey, cert: certificate};
var server = http.createServer(credentials,function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
});
server.listen(8000);
Und wenn ich diese App laufen, es tut reagieren auf HTTPS - Anfragen. Beachten Sie, dass ich nicht denke, dass toString () für das fs-Ergebnis von Bedeutung ist, da ich Kombinationen von beiden verwendet habe und immer noch kein es bueno.
BEARBEITEN ZUM HINZUFÜGEN:
Für Produktionssysteme ist es wahrscheinlich besser, Nginx oder HAProxy zu verwenden, um Anforderungen an Ihre nodejs-App zu senden. Sie können nginx so einrichten, dass es die SSL-Anforderungen verarbeitet, und einfach http mit Ihrem Knoten app.js sprechen.
BEARBEITEN ZUM HINZUFÜGEN (06.04.2015)
Für Systeme, die AWS verwenden, ist es besser, EC2 Elastic Load Balancers zu verwenden, um die SSL-Beendigung zu handhaben und regelmäßigen HTTP-Verkehr zu Ihren EC2-Webservern zuzulassen. Richten Sie Ihre Sicherheitsgruppe für weitere Sicherheit so ein, dass nur die ELB HTTP-Verkehr an die EC2-Instanzen senden darf, um zu verhindern, dass externer unverschlüsselter HTTP-Verkehr auf Ihre Computer gelangt.
Antworten:
In express.js (seit Version 3) sollten Sie diese Syntax verwenden:
Auf diese Weise stellen Sie dem nativen http / https-Server Express-Middleware zur Verfügung
Wenn Ihre App auf Ports unter 1024 ausgeführt werden soll, müssen Sie den
sudo
Befehl (nicht empfohlen) oder einen Reverse-Proxy (z. B. nginx, haproxy) verwenden.quelle
localhost:80
aber nichthttps://localhost:443
Zunächst müssen Sie die Dateien selfsigned.key und selfsigned.crt erstellen. Gehen Sie zu Erstellen eines selbstsignierten SSL-Zertifikats oder führen Sie die folgenden Schritte aus.
Gehen Sie zum Terminal und führen Sie den folgenden Befehl aus.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./selfsigned.key -out selfsigned.crt
quelle
Ich hatte ein ähnliches Problem damit, dass SSL an einem anderen Port als Port 443 funktioniert. In meinem Fall hatte ich ein Bundle-Zertifikat sowie ein Zertifikat und einen Schlüssel. Das Bundle-Zertifikat ist eine Datei, die mehrere Zertifikate enthält. Der Knoten erfordert, dass Sie diese Zertifikate in separate Elemente eines Arrays aufteilen.
In app.js müssen Sie https angeben und den Server entsprechend erstellen. Stellen Sie außerdem sicher, dass der Port, den Sie verwenden möchten, tatsächlich eingehenden Datenverkehr zulässt.
quelle
Einschließlich Punkte:
HTTP- und WS-Behandlung
SSL-Konfiguration
In Sailsjs gibt es zwei Möglichkeiten, das gesamte Material zu konfigurieren. Die erste besteht darin, im Konfigurationsordner zu konfigurieren, wobei jede Datei ihre eigenen Dateien hat (wie die Datenbankverbindung bezüglich der Einstellungen in connection.js). Und zweitens wird die Struktur der Umgebungsbasisdatei konfiguriert, wobei jede Umgebungsdatei im
config/env
Ordner angezeigt wird und jede Datei Einstellungen für eine bestimmte Umgebung enthält.Sails sucht zuerst im Ordner config / env und freut sich dann auf config / * .js
Jetzt können Sie ssl einrichten
config/local.js
.Oder in der Produktion.js
http / https & ws / wss-Umleitung
Hier ist ws Web Socket und wss steht für Secure Web Socket, da wir ssl und jetzt http einrichten und beide Anforderungen sicher werden und sich in https bzw. wss umwandeln.
Es gibt viele Quellen aus unserer App, die Anfragen erhalten, wie z. B. Blog-Posts und Social-Media-Posts. Unser Server wird jedoch nur unter https ausgeführt. Wenn also Anfragen von http kommen, wird im Client-Browser der Fehler "Diese Site kann nicht erreicht werden" angezeigt. Und wir verlieren unseren Website-Verkehr. Wir müssen also die http-Anfrage an https umleiten. Dieselben Regeln erlauben Websocket, sonst schlägt Socket fehl.
Wir müssen also denselben Server auf Port 80 (http) ausführen und alle Anforderungen an Port 443 (https) umleiten. Sails kompiliert zuerst die Datei config / bootstrap.js, bevor der Server angehoben wird. Hier können wir unseren Express-Server an Port 80 starten.
In config / bootstrap.js (http-Server erstellen und alle Anfragen an https umleiten)
quelle
Verwenden Sie Greenlock-Express: Kostenloses SSL, automatisiertes HTTPS
Greenlock übernimmt die sofortige Ausgabe und Erneuerung von Zertifikaten (über Let's Encrypt) und die Umleitung von http => https.
express-app.js
::server.js
::Screencast
Sehen Sie sich die QuickStart-Demonstration an: https://youtu.be/e8vaR4CEZ5s
Für Localhost
Beantworten Sie dies nur im Voraus, da es sich um eine häufige Folgefrage handelt:
Sie können keine SSL-Zertifikate auf localhost haben. Sie können jedoch so etwas wie Telebit verwenden, mit dem Sie lokale Apps als echte Apps ausführen können.
Sie können auch private Domains mit Greenlock über DNS-01-Herausforderungen verwenden, die in der README zusammen mit verschiedenen Plugins, die dies unterstützen, erwähnt werden.
Nicht standardmäßige Ports (dh Nr. 80/443)
Lesen Sie den obigen Hinweis zu localhost. Mit Let's Encrypt können Sie auch keine nicht standardmäßigen Ports verwenden.
Sie können Ihre internen Nicht-Standard-Ports jedoch als externe Standard-Ports über Port-Forward, Sni-Route oder Telebit bereitstellen, das SNI-Routing und Port-Forwarding / Relaying für Sie übernimmt.
Sie können auch DNS-01-Herausforderungen verwenden. In diesem Fall müssen Sie überhaupt keine Ports verfügbar machen, und Sie können auf diese Weise auch Domänen in privaten Netzwerken sichern.
quelle
So funktioniert es bei mir. Die verwendete Umleitung leitet auch alle normalen http um.
quelle
Dies ist mein Arbeitscode für Express 4.0 .
Express 4.0 unterscheidet sich stark von 3.0 und anderen.
4.0 Sie haben die Datei / bin / www, die Sie hier https hinzufügen werden.
"npm start" ist die Standardmethode zum Starten des Express 4.0-Servers.
Die Funktion readFileSync () sollte __dirname get current directory verwenden
while require () benutze ./ verweise auf das aktuelle Verzeichnis.
Zuerst legen Sie die Dateien private.key und public.cert unter dem Ordner / bin ab. Dies ist derselbe Ordner wie die WWW-Datei .
quelle