Skip to content

Créer un serveur HTTPS

Créer un serveur HTTPS avec Node.js est un moyen sécurisé d'offrir du contenu à vos utilisateurs. Ce tutoriel vous guidera à travers la création d'un tel serveur en utilisant la bibliothèque Express et en générant un certificat SSL auto-signé pour le développement local.

Étape 1: Installer les dépendances nécessaires

npm install express
npm install express

Étape 2: Générer un certificat SSL auto-signé

Pour un environnement de développement, vous pouvez générer votre propre certificat SSL auto-signé. Voici comment le faire:

bash
# Créer un dossier pour stocker vos clés
mkdir keys

# Se déplacer dans le dossier
cd keys

# Générer une clé privée
openssl genpkey -out private-key.pem -aes256 -algorithm rsa

# Générer un certificat SSL
openssl req -new -x509 -key private-key.pem -out cert.pem -days 365
# Créer un dossier pour stocker vos clés
mkdir keys

# Se déplacer dans le dossier
cd keys

# Générer une clé privée
openssl genpkey -out private-key.pem -aes256 -algorithm rsa

# Générer un certificat SSL
openssl req -new -x509 -key private-key.pem -out cert.pem -days 365

Remarque: Dans un environnement de production, il est préférable d'utiliser un certificat SSL émis par une autorité de certification reconnue.

Étape 3: Créer le serveur HTTPS avec Node.js et Express

javascript
// Importer les modules nécessaires
import express from 'express';
import fs from 'fs';
import https from 'https';

// Charger les clés SSL
const privateKey = fs.readFileSync('keys/private-key.pem', 'utf8');
const certificate = fs.readFileSync('keys/cert.pem', 'utf8');
const credentials = { key: privateKey, cert: certificate };

// Créer une instance d'Express
const app = express();

// Un exemple de route
app.get('/', (req, res) => {
    res.send('Bonjour depuis le serveur HTTPS!');
});

// Créer le serveur HTTPS
const httpsServer = https.createServer(credentials, app);

// Démarrer le serveur sur le port 3000
httpsServer.listen(3000, () => {
    console.log('Serveur HTTPS démarré sur le port 3000!');
});
// Importer les modules nécessaires
import express from 'express';
import fs from 'fs';
import https from 'https';

// Charger les clés SSL
const privateKey = fs.readFileSync('keys/private-key.pem', 'utf8');
const certificate = fs.readFileSync('keys/cert.pem', 'utf8');
const credentials = { key: privateKey, cert: certificate };

// Créer une instance d'Express
const app = express();

// Un exemple de route
app.get('/', (req, res) => {
    res.send('Bonjour depuis le serveur HTTPS!');
});

// Créer le serveur HTTPS
const httpsServer = https.createServer(credentials, app);

// Démarrer le serveur sur le port 3000
httpsServer.listen(3000, () => {
    console.log('Serveur HTTPS démarré sur le port 3000!');
});

Étape 4: Exécutez votre serveur

Exécutez le script avec Node.js:

node votreNomDeFichier.js
node votreNomDeFichier.js

Vous devriez voir le message "Serveur HTTPS démarré sur le port 3000!".

Lorsque vous visitez https://localhost:3000/ dans votre navigateur, vous recevrez probablement un avertissement concernant le certificat auto-signé. Vous pouvez l'ignorer et continuer pour voir votre serveur en action. Dans un environnement de production, comme mentionné précédemment, il est essentiel d'utiliser un certificat valide.

En utilisant Certbot pour obtenir un certificat SSL

Utiliser Certbot est une excellente option pour obtenir un certificat SSL/TLS gratuit de Let's Encrypt pour votre site web en production. Certbot vous permet de générer automatiquement des certificats SSL/TLS et de les renouveler.

Voici comment vous pouvez configurer un serveur HTTPS avec Node.js et Express en utilisant Certbot :

Étape 1: Préparation de votre domaine

Assurez-vous que votre domaine est bien configuré et pointe vers le serveur où Node.js est en cours d'exécution.

Étape 2: Installer Certbot

L'installation de Certbot dépend de votre système d'exploitation. Pour les distributions basées sur Debian/Ubuntu, vous pourriez faire :

bash
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

Pour d'autres systèmes, veuillez consulter la documentation officielle de Certbot.

Étape 3: Obtenir un certificat SSL/TLS

Si vous utilisez un serveur web comme Nginx ou Apache, Certbot a des plugins qui peuvent automatiquement obtenir et installer les certificats pour vous.

Mais pour Node.js, nous pouvons utiliser le mode "standalone" :

bash
sudo certbot certonly --standalone -d example.com -d www.example.com
sudo certbot certonly --standalone -d example.com -d www.example.com

Remplacez "example.com" et "www.example.com" par votre domaine.

Étape 4: Configurer Node.js pour utiliser les certificats

Une fois Certbot installé et le certificat généré, vous pouvez configurer votre application Node.js pour utiliser ces certificats :

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

const app = express();

const privateKey = fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem', 'utf8');
const certificate = fs.readFileSync('/etc/letsencrypt/live/example.com/cert.pem', 'utf8');
const ca = fs.readFileSync('/etc/letsencrypt/live/example.com/chain.pem', 'utf8');

const credentials = {
  key: privateKey,
  cert: certificate,
  ca: ca
};

app.get('/', (req, res) => {
  res.send('Hello from HTTPS server with Certbot!');
});

const httpsServer = https.createServer(credentials, app);

httpsServer.listen(3000, () => {
  console.log('HTTPS Server running on port 3000');
});
import express from 'express';
import https from 'https';
import fs from 'fs';

const app = express();

const privateKey = fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem', 'utf8');
const certificate = fs.readFileSync('/etc/letsencrypt/live/example.com/cert.pem', 'utf8');
const ca = fs.readFileSync('/etc/letsencrypt/live/example.com/chain.pem', 'utf8');

const credentials = {
  key: privateKey,
  cert: certificate,
  ca: ca
};

app.get('/', (req, res) => {
  res.send('Hello from HTTPS server with Certbot!');
});

const httpsServer = https.createServer(credentials, app);

httpsServer.listen(3000, () => {
  console.log('HTTPS Server running on port 3000');
});

N'oubliez pas de remplacer "example.com" par votre domaine.

Étape 5: Renouveler automatiquement les certificats

Let's Encrypt certificats ont une durée de validité de 90 jours, donc il est recommandé de les renouveler régulièrement. Certbot dispose d'un mode de renouvellement que vous pouvez exécuter avec :

bash
sudo certbot renew
sudo certbot renew

Il est courant d'automatiser cela avec un cron job.

Utiliser un serveur web comme proxy

Au lieu d'exposer directement votre application Node.js, vous pourriez vouloir la mettre derrière un serveur web comme Nginx ou Apache. Cela vous permet de gérer SSL/TLS au niveau du serveur web et de transmettre les requêtes HTTP simples à votre application Node.js.