Jak utworzyć serwer HTTPS w węźle.js?
Biorąc pod uwagę klucz SSL i certyfikat, jak utworzyć usługę HTTPS?
9 answers
Znalazłem następujący przykład.
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);
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);
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);
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});
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:
- https://github.com/coolaj86/nodejs-ssl-example
- http://blog.coolaj86.com/articles/how-to-create-a-csr-for-https-tls-ssl-rsa-pems/
- https://github.com/coolaj86/nodejs-self-signed-certificate-example
- https://github.com/Daplie/localhost.daplie.com-certificates
- https://github.com/Daplie/localhost.daplie.com-server
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).
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);
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
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');
});
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
- Pobierz plik rar Dla OpenSSL tutaj: https://indy.fulgan.com/SSL/openssl-0.9.8r-i386-win32-rev2.zip
- wystarczy skopiować folder na dysk C.
- 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.
- 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
- następnie uruchom serwer OpenSSL > genrsa-des3-out.enc.klucz 1024
- następnie poprosi o wyrażenie pass: wprowadź 4 do 11 znaków jako hasło do certyfikatu
- następnie uruchom ten serwer OpenSSL>REQ-new-key.enc.serwer key-out.csr
- 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
- 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
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