Como configuro um certificado SSL para um servidor express.js?

Antes, em uma versão mais antiga do express, eu poderia fazer isso:

express.createServer({key:'keyFile', cert:'certFile'}); 

No entanto, em versões mais recentes do express isto não funciona mais:

 var app = express(); 

Devo chamar app.use() para definir os certificados? Se sim como?

Consulte os documentos do Express e os documentos do Node para https.createServer (que é o que o express recomenda usar):

 var privateKey = fs.readFileSync( 'privatekey.pem' ); var certificate = fs.readFileSync( 'certificate.pem' ); https.createServer({ key: privateKey, cert: certificate }, app).listen(port); 

Outras opções para createServer estão em: http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener

Consegui que o SSL funcionasse com o seguinte código clichê:

 var fs = require('fs'), http = require('http'), https = require('https'), express = require('express'); var port = 8000; var options = { key: fs.readFileSync('./ssl/privatekey.pem'), cert: fs.readFileSync('./ssl/certificate.pem'), }; var app = express(); var server = https.createServer(options, app).listen(port, function(){ console.log("Express server listening on port " + port); }); app.get('/', function (req, res) { res.writeHead(200); res.end("hello world\n"); }); 

Este é o meu código de trabalho para o expresso 4.0 .

O express 4.0 é muito diferente do 3.0 e outros.

4.0 você tem / bin / www arquivo, que você vai adicionar https aqui.

“npm start” é a maneira padrão de iniciar o servidor do Express 4.0.

function readFileSync () deve usar __dirname get diretório atual

while require () use ./ consulte o diretório atual.

Primeiro você coloca o arquivo private.key e public.cert na pasta / bin. É a mesma pasta que o arquivo WWW .

nenhum diretório encontrado erro:

  key: fs.readFileSync('../private.key'), cert: fs.readFileSync('../public.cert') 

erro, nenhum diretório encontrado

  key: fs.readFileSync('./private.key'), cert: fs.readFileSync('./public.cert') 

Código de trabalho deve ser

 key: fs.readFileSync(__dirname + '/private.key', 'utf8'), cert: fs.readFileSync(__dirname + '/public.cert', 'utf8') 

O código https completo é:

 const https = require('https'); const fs = require('fs'); // readFileSync function must use __dirname get current directory // require use ./ refer to current directory. const options = { key: fs.readFileSync(__dirname + '/private.key', 'utf8'), cert: fs.readFileSync(__dirname + '/public.cert', 'utf8') }; // Create HTTPs server. var server = https.createServer(options, app);