web-dev-qa-db-fra.com

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

Avant, dans une version antérieure d'Express, je pouvais le faire:

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 certs? Si c'est le cas, comment?

119
murvinlai

Voir les documents Express ainsi que les Documents sur les nœuds pour https.createServer (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 de createServer sont les suivantes: http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener

136
ebohlman

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

Ceci est mon code de travail pour exprimer 4.0 .

express 4.0 est très différent de 3.0 et des autres.

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

"npm start" est la méthode standard pour démarrer Express 4.0 Server.

la fonction readFileSync () doit utiliser __ dirname obtenir le répertoire en cours

tandis que require () utilise ./ fait référence au répertoire en cours.

Vous commencez par placer les fichiers private.key et public.cert dans le dossier/bin. Il s'agit du même dossier que le fichier WWW .

aucun répertoire de ce type n'a trouvé d'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')

Le code de travail devrait ê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);
7
hoogw