Skip to content

Utiliser SSL avec Express.js

Utiliser SSL (Secure Sockets Layer) ou TLS (Transport Layer Security) est crucial pour sécuriser les communications entre le client et le serveur, particulièrement si vous gérez des informations sensibles. Voici comment vous pouvez configurer un serveur Express.js pour utiliser HTTPS.

1. Générer un Certificat SSL

Pour utiliser SSL, vous avez besoin d'un certificat SSL. Pour le développement local, vous pouvez créer un certificat auto-signé. Pour la production, vous devriez obtenir un certificat d'une autorité de certification (CA) reconnue.

a. Créer un Certificat Auto-signé (Pour le Développement)

sh
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

b. Obtenir un Certificat d'une Autorité de Certification

Pour la production, vous pouvez obtenir un certificat SSL d’une Autorité de Certification comme Let’s Encrypt, qui fournit des certificats SSL gratuits.

2. Configurer Express pour Utiliser HTTPS

Une fois que vous avez votre certificat SSL et votre clé privée, vous pouvez configurer Express pour utiliser HTTPS. Vous aurez besoin du module https de Node.js pour cela.

Voici un exemple de configuration d'un serveur HTTPS avec Express :

javascript
import express from 'express';
import https from 'https';
import fs from 'fs';

const app = express();

app.get('/', (req, res) => {
  res.send('Bonjour, monde sécurisé!');
});

const options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

const server = https.createServer(options, app);

const PORT = 3000;
server.listen(PORT, () => {
  console.log(`Le serveur HTTPS est en marche sur https://localhost:${PORT}`);
});
import express from 'express';
import https from 'https';
import fs from 'fs';

const app = express();

app.get('/', (req, res) => {
  res.send('Bonjour, monde sécurisé!');
});

const options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

const server = https.createServer(options, app);

const PORT = 3000;
server.listen(PORT, () => {
  console.log(`Le serveur HTTPS est en marche sur https://localhost:${PORT}`);
});

Dans cet exemple :

  • Nous importons les modules nécessaires, express, https, et fs.
  • Nous lisons les fichiers de certificat et de clé privée avec fs.readFileSync.
  • Nous créons un serveur HTTPS en passant les options de certificat et l'application Express à https.createServer.
  • Enfin, le serveur est lancé sur le port spécifié.

3. Faire attention au Mode de Développement

Les navigateurs web afficheront probablement des avertissements de sécurité lorsque vous utilisez un certificat auto-signé. Vous pouvez généralement choisir de faire confiance au certificat pour le développement. Pour la production, utilisez toujours un certificat valide fourni par une autorité de certification reconnue pour éviter ces avertissements.

4. Rediriger le Trafic HTTP vers HTTPS

Il est aussi une bonne pratique de rediriger tout trafic non sécurisé (HTTP) vers HTTPS. Vous pouvez faire cela avec un autre serveur Express qui écoute sur le port 80 et redirige toutes les requêtes vers HTTPS.

javascript
import http from 'http';

http.createServer((req, res) => {
  res.writeHead(301, { "Location": "https://" + req.headers['host'] + req.url });
  res.end();
}).listen(80);
import http from 'http';

http.createServer((req, res) => {
  res.writeHead(301, { "Location": "https://" + req.headers['host'] + req.url });
  res.end();
}).listen(80);

En suivant ces étapes, vous pouvez configurer votre application Express.js pour servir du contenu de manière sécurisée via HTTPS.