Jak utworzyć serwer HTTPS w węźle.js?

Biorąc pod uwagę klucz SSL i certyfikat, jak utworzyć usługę HTTPS?

Author: John Slegers, 2011-05-14

9 answers

Znalazłem następujący przykład.

Https://web.archive.org/web/20120203022122/http://www.silassewell.com/blog/2010/06/03/node-js-https-ssl-server-example/

To działa dla node v0.1.94 - v0.3. 1. server.setSecure() jest usuwany w nowszych wersjach node.

Bezpośrednio z tego źródła:

const crypto = require('crypto'),
  fs = require("fs"),
  http = require("http");

var privateKey = fs.readFileSync('privatekey.pem').toString();
var certificate = fs.readFileSync('certificate.pem').toString();

var credentials = crypto.createCredentials({key: privateKey, cert: certificate});

var handler = function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
};

var server = http.createServer();
server.setSecure(credentials);
server.addListener("request", handler);
server.listen(8000);
 123
Author: hvgotcodes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-16 15:43:45

Express API doc jasno to określa.

Dodatkowo ta odpowiedź podaje kroki tworzenia certyfikatu z własnym podpisem.

Dodałem kilka komentarzy i fragment z węzła .dokumentacja js HTTPS :

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);
 406
Author: Jacob Marble,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-03 20:31:31

Znalazłem to pytanie podczas googlowania "node https", ale przykład w zaakceptowanej odpowiedzi jest bardzo stary-pobrany z docs bieżącej (v0.10) wersji node, powinien wyglądać tak:

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);
 74
Author: pkyeck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:26

Powyższe odpowiedzi są dobre, ale z Express i node to będzie działać dobrze.

Ponieważ express Utwórz aplikację dla Ciebie, pominę to tutaj.

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});
 46
Author: nu1silva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-15 19:57:23

Zauważyłem, że żadna z tych odpowiedzi nie pokazuje, że dodanie pośredniego korzenia CA do łańcucha, oto kilka zero-config przykłady do zabawy, aby zobaczyć że:

Fragment:

var options = {
  key: fs.readFileSync(path.join('certs', 'my-server.key.pem'))
, ca: [ fs.readFileSync(path.join('certs', 'my-root-ca.crt.pem'))]
, cert: fs.readFileSync(path.join('certs', 'my-server.crt.pem'))
, requestCert: false
, rejectUnauthorized: 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);
});

To jest jedną z tych rzeczy, które są często łatwiejsze, jeśli nie spróbuj zrobić to bezpośrednio przez connect lub express, ale pozwól natywny moduł https obsłużyć go, a następnie użyć go do obsługi aplikacji connect / express.

Ponadto, jeśli używasz server.on('request', app) zamiast przekazywać aplikację podczas tworzenia serwera, daje to możliwość przekazania instancji server do jakiejś funkcji inicjującej, która tworzy aplikację connect / express (jeśli chcesz wykonać websockets przez ssl na tym samym serwerze, dla przykład).

 16
Author: CoolAJ86,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-01 03:39:08

Minimalna konfiguracja serwera HTTPS w węźle.js byłoby coś takiego:

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

Jeśli chcesz również obsługiwać żądania http, musisz wprowadzić tylko tę małą modyfikację:

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);
 14
Author: John Slegers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-10 23:40:26

Aby umożliwić aplikacji nasłuchiwanie zarówno http, jak i https odpowiednio na portach 80 i 443, wykonaj następujące czynności

Utwórz aplikację express:

var express = require('express');
var app = express();

Aplikacja zwracana przez express() jest funkcją JavaScript. Może być przekazywana do serwerów HTTP węzła jako callback do obsługi żądań. Ułatwia to dostarczanie wersji HTTP i HTTPS aplikacji przy użyciu tej samej podstawy kodu.

Możesz to zrobić w następujący sposób:

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

var options = {
  key: fs.readFileSync('/path/to/key.pem'),
  cert: fs.readFileSync('/path/to/cert.pem')
};

http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

Aby uzyskać szczegółowe informacje, zobacz doc

 7
Author: cmd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-06 22:51:53
var path = require('path');
var express = require('express');

var app = express();

var staticPath = path.join(__dirname, '/public');
app.use(express.static(staticPath));

app.listen(8070, function() {
  console.log('Server started at port 8070');
});
 -2
Author: Irfan Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-09 19:31:48
  1. Pobierz plik rar Dla OpenSSL tutaj: https://indy.fulgan.com/SSL/openssl-0.9.8r-i386-win32-rev2.zip
  2. wystarczy skopiować folder na dysk C.
  3. Utwórz OpenSSL.plik cnf i pobierz ich zawartość z : http://web.mit.edu/crypto/openssl.cnf openssl.cnf można umieścić w dowolnym miejscu, ale ścieżka powinna być poprawna, gdy podamy w wierszu polecenia.
  4. Otwórz polecenie propmt i ustaw OpenSSL.cnf path C:\set OPENSSL_CONF=d: / openssl.cnf 5.Uruchom to w cmd : C:\openssl-0.9.8r-i386-win32-rev2>openssl.exe
  5. następnie uruchom serwer OpenSSL > genrsa-des3-out.enc.klucz 1024
  6. następnie poprosi o wyrażenie pass: wprowadź 4 do 11 znaków jako hasło do certyfikatu
  7. następnie uruchom ten serwer OpenSSL>REQ-new-key.enc.serwer key-out.csr
  8. następnie poprosi o kilka szczegółów, takich jak kod kraju nazwa państwa itp. wypełnij go swobodnie. 10 . Następnie uruchom serwer OpenSSL > RSA-in.enc.serwer key-out.klucz
  9. Uruchom ten OpenSSL> x509-req-days 365 - na serwerze.csr-serwer signkey.serwer key-out.crt następnie użyj poprzedniego kodu, który znajduje się na stack overflow Dzięki
 -3
Author: Er Shubham Patidar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-27 04:14:38