Como criar um servidor de HTTPS no nó.js?
Dado um certificado SSL, como se cria um serviço HTTPS?
9 answers
Encontrei o seguinte exemplo.
Isto funciona para o nó v0. 1. 94-v0.3.1. server.setSecure()
é removido nas versões mais recentes do nó.
Directamente dessa fonte:
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);
Adicionalmente Esta resposta dá os passos para criar um certificado auto-assinado.
Adicionei alguns comentários e um excerto do nó .documentação do HTTPS js:
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);
Encontrou esta pergunta enquanto pesquisava no Google "nó https", mas o exemplo na resposta Aceite é muito antigo-retirado do docs da versão actual (v0. 10) do nó, deverá ser assim:
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);
As respostas acima são boas, mas com o expresso e nó isto vai funcionar bem.
Uma vez que o express criou a aplicação para ti, vou saltar isso aqui.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});
Eu notei que nenhuma destas respostas mostra que a adição de uma raiz intermédia CA à cadeia, Aqui estão alguns exemplos zero-config com os quais brincar para ver isso ...
- 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
Excerto:
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);
});
Isto é ... uma dessas coisas que é muitas vezes mais fácil se você não tentar fazê-lo diretamente através do connect ou express, mas deixe o módulo nativo https
lidar com ele e, em seguida, use isso para lhe servir a aplicação connect / express.
Também, se usar server.on('request', app)
em vez de passar a aplicação ao criar o servidor, ele dá-Lhe a oportunidade de passar a instância server
para alguma função de inicialização que cria a aplicação connect / express (se quiser fazer websockets sobre ssl no mesmo servidor, para exemplo).
A configuração mínima para um servidor de HTTPS no nó.js seria algo assim:
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);
Se também quiser suportar pedidos http, terá de fazer apenas esta pequena modificação:
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);
Para permitir que o seu aplicativo Ouça tanto para http
e https
nos portos 80
e 443
respectivamente, faça o seguinte
Crie uma aplicação expressa:
var express = require('express');
var app = express();
A aplicação devolvida por express()
é uma função JavaScript. Ele pode ser passado para os servidores HTTP do Node como um callback para lidar com pedidos. Isso torna mais fácil fornecer tanto HTTP e HTTPS versões de seu aplicativo usando a mesma base de código.
Pode fazer o seguinte:
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);
Para mais detalhes, consulte o doc
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');
});
- Obter o ficheiro rar Para o openssl configurado a partir daqui: https://indy.fulgan.com/SSL/openssl-0.9.8r-i386-win32-rev2.zip Copie a sua pasta na unidade C.
- Criar openssl.ficheiro cnf e transferir o seu conteúdo de: http://web.mit.edu/crypto/openssl.cnf openssl.cnf pode ser colocado em qualquer lugar, mas o caminho deve ser correto quando damos no comando prompt.
- abrir o comando propmt e definir o openssl.localização do cnf C:\set OPENSSL_CONF=d: / openssl.cnf 5.Executar isto em cmd : C:\openssl-0.9.8r-i386-win32-rev2 > openssl.exe
- Execute então OpenSSL> genrsa-des3-out server.enc.chave 1024
- então irá pedir frases-passe : indique 4 a 11 caracteres como a sua senha para o certificado
- Execute então este Openssl>req-servidor de Chave Nova.enc.servidor de saída.csr
- então ele irá pedir alguns detalhes como o nome de Estado do Código do país, etc. enche-o à vontade. 10 . Em seguida, execute Openssl > RSA-in servidor.enc.servidor de saída.chave
- Execute este OpenSSL> x509-req-days 365-in server.servidor csr-signkey.servidor de saída.crt, em seguida, usar o código anterior que estão na pilha overflow Obrigado.