425 Stimmen

Wie erstellt man einen HTTPS-Server in Node.js?

Wie erstellt man mit einem SSL-Schlüssel und einem Zertifikat einen HTTPS-Dienst?

2 Stimmen

Ich habe restify.js anstelle von express.js, aber die Idee ist die gleiche. So habe ich einen node.js-Server eingerichtet, der sowohl HTTP als auch HTTPS akzeptiert qugstart.com/blog/node-js/

2 Stimmen

Ohne Express und mit der neuesten Version von Node - siehe hier: stackoverflow.com/a/21809393/388026

1 Stimmen

Was ist aus dieser Frage geworden? Aus den Antworten geht hervor, dass es ursprünglich um express.js ging.

544voto

Jacob Marble Punkte 26412

Le site Express-API-Dokument sagt dies ziemlich deutlich aus.

Zusätzlich 本答 gibt die Schritte zur Erstellung eines selbstsignierten Zertifikats an.

Ich habe einige Kommentare und einen Auszug aus der Node.js HTTPS-Dokumentation :

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);

175voto

hvgotcodes Punkte 114342

Für Node 0.3.4 und höher bis hin zum aktuellen LTS (v16 zum Zeitpunkt dieser Bearbeitung), https://nodejs.org/api/https.html#httpscreateserveroptions-requestlistener enthält den gesamten Beispielcode, den Sie benötigen:

const https = require(`https`);
const fs = require(`fs`);

const options = {
  key: fs.readFileSync(`test/fixtures/keys/agent2-key.pem`),
  cert: fs.readFileSync(`test/fixtures/keys/agent2-cert.pem`)
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end(`hello world\n`);
}).listen(8000);

Beachten Sie, dass Sie bei der Verwendung von Let's Encrypt-Zertifikaten mit dem certbot Tool wird der private Schlüssel als privkey.pem und das Zertifikat heißt fullchain.pem :

const certDir = `/etc/letsencrypt/live`;
const domain = `YourDomainName`;
const options = {
  key: fs.readFileSync(`${certDir}/${domain}/privkey.pem`),
  cert: fs.readFileSync(`${certDir}/${domain}/fullchain.pem`)
};

92voto

Philipp Kyeck Punkte 17620

Ich habe diese Frage beim Googeln nach "node https" gefunden, aber das Beispiel in der akzeptierte Antwort ist sehr alt und stammt aus dem docs der aktuellen (v0.10) Version von Node, sollte es wie folgt aussehen:

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);

49voto

nu1silva Punkte 587

Die obigen Antworten sind gut, aber mit Express und Node wird das gut funktionieren.

Da Express die App für Sie erstellt, werde ich das hier auslassen.

var express = require('express')
  , fs = require('fs')
  , routes = require('./routes');

var privateKey = fs.readFileSync('cert/key.pem').toString();
var certificate = fs.readFileSync('cert/certificate.pem').toString();  

// To enable HTTPS
var app = module.exports = express.createServer({key: privateKey, cert: certificate});

23voto

John Slegers Punkte 41127

Das minimale Setup für einen HTTPS-Server in Node.js würde etwa so aussehen:

var https = require('https');
var fs = require('fs');

var httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

var app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

https.createServer(httpsOptions, app).listen(4433);

Wenn Sie auch http-Anfragen unterstützen wollen, müssen Sie nur diese kleine Änderung vornehmen:

var http = require('http');
var https = require('https');
var fs = require('fs');

var httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

var app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

http.createServer(app).listen(8888);
https.createServer(httpsOptions, app).listen(4433);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X