Como criar um servidor de HTTPS no nó.js?

Dado um certificado SSL, como se cria um serviço HTTPS?

Author: John Slegers, 2011-05-14

9 answers

Encontrei o seguinte exemplo.

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

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);
 123
Author: hvgotcodes, 2018-06-16 15:43:45
A API doc expressa isto muito claramente.

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);
 406
Author: Jacob Marble, 2017-09-03 20:31:31

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);
 74
Author: pkyeck, 2017-05-23 11:33:26

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});
 46
Author: nu1silva, 2013-02-15 19:57:23

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 ...

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

 16
Author: CoolAJ86, 2015-07-01 03:39:08

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);
 14
Author: John Slegers, 2016-01-10 23:40:26

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

 7
Author: cmd, 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, 2018-05-09 19:31:48
  1. Obter o ficheiro rar Para o openssl configurado a partir daqui: https://indy.fulgan.com/SSL/openssl-0.9.8r-i386-win32-rev2.zip
  2. Copie a sua pasta na unidade C.
  3. 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.
  4. 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
  5. Execute então OpenSSL> genrsa-des3-out server.enc.chave 1024
  6. então irá pedir frases-passe : indique 4 a 11 caracteres como a sua senha para o certificado
  7. Execute então este Openssl>req-servidor de Chave Nova.enc.servidor de saída.csr
  8. 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
  9. 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.
 -3
Author: Er Shubham Patidar, 2017-07-27 04:14:38