Come posso impostare un certificato SSL per un server express.js?

Prima, in una versione precedente di express, potevo fare questo:

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

Tuttavia, nelle versioni più recenti di Express non funziona più:

 var app = express(); 

Devo chiamare app.use() per impostare i certificati? Se é cosi, come?

Vedere i documenti Express e i documenti del nodo per https.createServer (che è ciò che express consiglia di utilizzare):

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

Altre opzioni per createServer sono disponibili all’indirizzo: http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener

Sono stato in grado di ottenere il funzionamento SSL con il seguente codice boilerplate:

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

Questo è il mio codice di lavoro per Express 4.0 .

express 4.0 è molto diverso da 3.0 e altri.

4.0 hai / bin / www file, che stai per aggiungere https qui.

“npm start” è un metodo standard per l’avvio del server Express 4.0.

funzione readFileSync () dovrebbe usare __dirname ottenere la directory corrente

mentre require () usa ./ si riferisce alla directory corrente.

Per prima cosa metti il ​​file private.key e public.cert nella cartella / bin, è la stessa cartella del file WWW .

nessun errore trovato nella directory:

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

errore, nessuna directory trovata

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

Il codice di lavoro dovrebbe essere

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

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