Comment créer un serveur HTTPS dans Node.js?

Étant donné une clé SSL et un certificat, comment créer un service HTTPS?

282
demandé sur John Slegers 2011-05-14 03:19:08

9 réponses

J'ai trouvé l'exemple suivant.

Https://web.archive.org/web/20120203022122/http://www.silassewell.com/blog/2010/06/03/node-js-https-ssl-server-example/

Cela fonctionne pour le nœud V0.1.94 - V0. 3.1. {[1] } est supprimé dans les nouvelles versions de node.

Directement à partir de cette source:

const crypto = require('crypto'),
  fs = require("fs"),
  http = require("http");

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

var credentials = crypto.createCredentials({key: privateKey, cert: certificate});

var handler = function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
};

var server = http.createServer();
server.setSecure(credentials);
server.addListener("request", handler);
server.listen(8000);
123
répondu hvgotcodes 2018-06-16 15:43:45

Le document Express API le précise assez clairement.

En Outre, cette réponse donne les étapes pour créer un certificat auto-signé.

J'ai ajouté quelques commentaires et un extrait du nœud .documentation JS HTTPS :

var express = require('express');
var https = require('https');
var http = require('http');
var fs = require('fs');

// This line is from the Node.js HTTPS documentation.
var options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.cert')
};

// Create a service (the app object is just a callback).
var app = express();

// Create an HTTP service.
http.createServer(app).listen(80);
// Create an HTTPS service identical to the HTTP service.
https.createServer(options, app).listen(443);
406
répondu Jacob Marble 2017-09-03 20:31:31

Trouvé cette question en googlant "node https" mais l'exemple dans la réponse acceptée est très ancien-tiré de la docs {[3] } de la version actuelle (v0.10) de node, il devrait ressembler à ceci:

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);
74
répondu pkyeck 2017-05-23 11:33:26

Les réponses ci-dessus sont bonnes mais avec Express et node cela fonctionnera bien.

Depuis express créer l'application pour vous, je vais sauter ici.

var express = require('express')
  , fs = require('fs')
  , routes = require('./routes');

var privateKey = fs.readFileSync('cert/key.pem').toString();
var certificate = fs.readFileSync('cert/certificate.pem').toString();  

// To enable HTTPS
var app = module.exports = express.createServer({key: privateKey, cert: certificate});
46
répondu nu1silva 2013-02-15 19:57:23

J'ai remarqué qu'aucune de ces réponses ne montre qu'en ajoutant un CA racine intermédiaire à la chaîne, voici quelques exemples zero-config à jouer pour voir que:

Extrait:

var options = {
  key: fs.readFileSync(path.join('certs', 'my-server.key.pem'))
, ca: [ fs.readFileSync(path.join('certs', 'my-root-ca.crt.pem'))]
, cert: fs.readFileSync(path.join('certs', 'my-server.crt.pem'))
, requestCert: false
, rejectUnauthorized: false
};

var server = https.createServer(options);
var app = require('./my-express-or-connect-app').create(server);
server.on('request', app);
server.listen(443, function () {
  console.log("Listening on " + server.address().address + ":" + server.address().port);
});

var insecureServer = http.createServer();
server.listen(80, function () {
  console.log("Listening on " + server.address().address + ":" + server.address().port);
});

C'est une de ces choses qui est souvent plus facile si vous n'essayez pas de le faire directement via connect ou express, mais laissez le module https natif le gérer et ensuite l'utiliser pour vous servir connect / express app.

En outre, si vous utilisez server.on('request', app) au lieu de passer l'application lors de la création du serveur, cela vous donne la possibilité de passer l'instance server à une fonction d'initialisation qui crée l'application connect / express (si vous voulez faire websockets sur ssl sur le même serveur, pour exemple).

16
répondu CoolAJ86 2015-07-01 03:39:08

Configuration minimale pour un serveur HTTPS dans Node.js serait quelque chose comme ceci :

var https = require('https');
var fs = require('fs');

var httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

var app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

https.createServer(httpsOptions, app).listen(4433);

Si vous souhaitez également prendre en charge les requêtes http, vous devez effectuer cette petite modification:

var http = require('http');
var https = require('https');
var fs = require('fs');

var httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

var app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

http.createServer(app).listen(8888);
https.createServer(httpsOptions, app).listen(4433);
14
répondu John Slegers 2016-01-10 23:40:26

Pour permettre à votre application d'écouter à la fois http et https sur les ports 80 et 443 respectivement, procédez comme suit

Créer une application express:

var express = require('express');
var app = express();

L'application renvoyée par express() est une fonction JavaScript. Il peut être passé aux serveurs HTTP du nœud en tant que rappel pour gérer les requêtes. Cela facilite la fourniture de versions HTTP et HTTPS de votre application en utilisant la même base de code.

, Vous pouvez le faire comme suit:

var express = require('express');
var https = require('https');
var http = require('http');
var fs = require('fs');
var app = express();

var options = {
  key: fs.readFileSync('/path/to/key.pem'),
  cert: fs.readFileSync('/path/to/cert.pem')
};

http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

Pour plus de détails, voir le doc

7
répondu cmd 2016-01-06 22:51:53
var path = require('path');
var express = require('express');

var app = express();

var staticPath = path.join(__dirname, '/public');
app.use(express.static(staticPath));

app.listen(8070, function() {
  console.log('Server started at port 8070');
});
-2
répondu Irfan Shah 2018-05-09 19:31:48
  1. Télécharger le fichier rar Pour openssl mis en place à partir d'ici: https://indy.fulgan.com/SSL/openssl-0.9.8r-i386-win32-rev2.zip
  2. copiez simplement votre dossier dans le lecteur C.
  3. Créer openssl.fichier cnf et télécharger leur contenu à partir de: http://web.mit.edu/crypto/openssl.cnf openssl.cnf peut être mis n'importe où, mais le chemin doit être correct lorsque nous donnons l'invite de commande.
  4. Ouvrez la commande propmt et définissez openssl.chemin cnf C:\set OPENSSL_CONF=d: / openssl.cnf 5.Exécutez ceci dans cmd : C:\openssl-0.9.8r-i386-win32-rev2 > openssl.exe
  5. ensuite, exécutez OpenSSL > genrsa-des3-out server.enc.clé 1024
  6. Ensuite, il demandera des phrases de passe: entrez 4 à 11 caractères comme mot de passe pour le Certificat
  7. ensuite, exécutez ce serveur Openssl > req-new-key.enc.key-out server.RSE
  8. Ensuite, il demandera des détails comme le nom de l'état du code de pays, etc. remplir librement. 10 . Ensuite, exécutez Openssl > serveur RSA-in.enc.key-out server.clé
  9. Exécutez cette OpenSSL > x509-req-days 365 -dans le serveur.rse -signkey serveur.key-out server.crt puis utilisez le code précédent qui sont sur le débordement de la pile Merci
-3
répondu Er Shubham Patidar 2017-07-27 04:14:38