Comment configurer un certificat SSL pour un express.serveur js?

Avant, dans une ancienne version d'express, je pouvais faire ceci:

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

Cependant, dans les nouvelles versions d'express, cela ne fonctionne plus:

var app = express();

Dois-je appeler app.use() pour définir les certificats? Si oui, comment?

99
demandé sur Patches 2012-08-04 02:38:06

3 réponses

Voir les documents Express ainsi que les documents de Noeud pour https.createServer (qui est ce que express recommande d'utiliser):

var privateKey = fs.readFileSync( 'privatekey.pem' );
var certificate = fs.readFileSync( 'certificate.pem' );

https.createServer({
    key: privateKey,
    cert: certificate
}, app).listen(port);

Les autres options pour createServer sont à: http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener

110
répondu ebohlman 2014-12-17 17:29:22

J'ai pu faire fonctionner SSL avec le code standard suivant:

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");
});
85
répondu geoffreak 2012-08-22 17:35:45

C'est ma code de travail pour express 4.0.

Express 4.0 est très différent de 3.0 et d'autres.

4.0 vous avez le fichier / bin / www, que vous allez ajouter https ici.

"npm start" est une façon standard de démarrer le serveur Express 4.0.

La fonction ReadFileSync() doit utiliser __dirname récupère le répertoire courant

Alors que require() Utiliser ./ se référer à courant répertoire.

d'abord, vous mettez privé.la clé et le public.fichier cert sous le dossier / bin, C'est le même dossier que le fichier WWW.

Aucun tel répertoire trouvé erreur:

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

  cert: fs.readFileSync('../public.cert')

Erreur, aucun répertoire trouvé

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

  cert: fs.readFileSync('./public.cert')

code de Travail doit être

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

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

le code https complet est:

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);
1
répondu hoogw 2018-08-20 20:18:29