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

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

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 noeud v0.1.94 – v0.3.1. server.setSecure() est supprimé dans les nouvelles versions de nœud.

Directement à partir de cette source:

 const crypto = require('crypto'), fs = require("fs"), http = require("http"); var privateKey = fs.readFileSync('privatekey.pem').toSsortingng(); var certificatee = fs.readFileSync('certificatee.pem').toSsortingng(); var credentials = crypto.createCredentials({key: privateKey, cert: certificatee}); 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); 

La doc de l’API Express l’ explique clairement.

De plus, cette réponse donne les étapes pour créer un certificate auto-signé.

J’ai ajouté des commentaires et un extrait de la documentation HTTPS de Node.js :

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

J’ai trouvé cette question pendant que vous consultiez “node https” mais l’exemple de la réponse acceptée est très ancien – pris dans la documentation 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); 

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

Depuis que express crée l’application pour vous, je vais sauter cela ici.

 var express = require('express') , fs = require('fs') , routes = require('./routes'); var privateKey = fs.readFileSync('cert/key.pem').toSsortingng(); var certificatee = fs.readFileSync('cert/certificatee.pem').toSsortingng(); // To enable HTTPS var app = module.exports = express.createServer({key: privateKey, cert: certificatee}); 

J’ai remarqué qu’aucune de ces réponses ne montre que l’ajout d’une CA racine intermédiaire à la chaîne, voici quelques exemples de zéro-configuration à utiliser pour voir cela:

Fragment:

 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, puis utilisez-le pour vous connecter / exécuter une application express.

De plus, si vous utilisez server.on('request', app) au lieu de transmettre l’application lors de la création du serveur, vous avez la possibilité de passer l’instance du server à une fonction d’initialisation qui crée l’application connect / express (si vous le souhaitez) faire des websockets sur ssl sur le même serveur, par exemple).

La configuration minimale pour un serveur HTTPS dans Node.js serait la suivante:

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

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

Créez une application express:

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

L’application renvoyée par express() est une fonction JavaScript. Il peut être transmis aux serveurs HTTP de Node en tant que rappel pour gérer les requêtes. Cela facilite la fourniture des 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 la doc

 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'); }); 
  1. Téléchargez le fichier rar pour openssl mis en place 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éez le fichier openssl.cnf et téléchargez leur contenu à partir de: http://web.mit.edu/crypto/openssl.cnf openssl.cnf peut être placé n’importe où, mais le chemin d’access doit être correct lorsque l’on affiche l’invite de commande.
  4. Ouvrez la commande propmt et définissez le chemin openssl.cnf C: \ set OPENSSL_CONF = d: /openssl.cnf
  5. Puis lancez OpenSSL> genrsa -des3 -out server.enc.key 1024
  6. Ensuite, il vous demandera des mots de passe: entrez 4 à 11 caractères comme mot de passe pour le certificate
  7. Puis lancez Openssl> req -new -key server.enc.key -out server.csr
  8. Ensuite, il vous demandera des détails comme le nom du code de pays, etc. remplissez-le librement. dix . Puis lancez Openssl> rsa -in server.enc.key -out server.key
  9. Exécutez OpenSSL> x509 -req -days 365 -dans server.csr -signkey server.key -out server.crt puis utilisez le code précédent qui est sur la stack overflow Merci