168 votes

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

Auparavant, dans une ancienne version d'express, je pouvais faire cela :

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

Toutefois, dans les versions plus récentes d'express, cela ne fonctionne plus :

var app = express();

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

204voto

ebohlman Points 6938

Voir les docs Express ainsi que le Documentation Node pour https.createServer (c'est ce qu'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);

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

128voto

geoffreak Points 771

J'ai réussi à 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");
});

14voto

hoogw Points 1047

C'est mon code de travail pour express 4.0 .

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

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

"npm start" est la méthode standard pour démarrer un serveur express 4.0.

La fonction readFileSync() doit utiliser la fonction __dirigeant récupérer le répertoire courant

while require() utiliser ./ se réfère au répertoire courant.

Tout d'abord, vous placez les fichiers private.key et public.cert dans le dossier /bin, C'est le même dossier que le fichier WWW .

erreur : aucun répertoire de ce type n'a été trouvé :

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

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

error, no such directory found

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X