Installer un serveur NodeJS avec HTTPS
HTTPS devient de plus en plus le protocole par défaut et est très largement poussé par Google et autres.
D'ailleurs, depuis peu, Chrome indique un site en HTTP comme non sécurisé.
Pre-requis
- Installer nodejs and npm
- Installer openssl
Note: sous Windows 10, vous pouvez utiliser le sous-système Linux et en ligne de commande avec le shell bash executer les commandes présentées ci-dessous.
Génération d'un certificat auto-signé
En bash avec openssl
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout selfsigned.key -out selfsigned.crt
A ce jour, il est préférable d'utiliser 4096 pour le rsa.
Utilisation de HTTPS en pur NodeJS
server-https.js
Créez un fichier server-https.js dans votre projet avec:
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('selfsigned.key'),
cert: fs.readFileSync('selfsigned.crt')};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('home page\n');})
.listen(8080);
Configuration du package.json pour démarrer le script
package.json
Ajoutez un fichier package.json:
{
"name": ...
"sripts: {
"start": "node server-https.js"
}, ...
}
Tester le server
Pour démarrer le server
$ npm run start
Et se connecter au server
$ curl -k https://localhost:8080
Optionnel: ajouter un group renforcé Diffie-Hellman
Vous pouvez ajouter un échange renforcé de clés Diffie-Hellman, qui est utilisé dans la négociation Perfect Forward Secrecy avec les clients.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Avec ExpressJS
Pour le support de HTTP et HTTPS avec un server ExpressJS
Encore plus simple, vous pouvez utiliser ExpressJS pour un server simple et ici ajouter le support de HTTPS:
const http = require('http');
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('selfsigned.key'),
cert: fs.readFileSync('selfsigned.crt')};
const express = require('express');
var app = express();
// [...] Configure your app here
http.createServer(app).listen(8080);
https.createServer(options, app).listen(8443);