← Retour au portail

Fiche 5 - SSL/TLS et Let's Encrypt — Sécuriser un site web

Comprendre SSL/TLS, générer un certificat Let's Encrypt avec Certbot et configurer HTTPS sur Apache2 sous Debian.

Intermédiaire — SISR 2ème année ⏱️ 20 min 📁 Cybersécurité

🎯 Objectifs de la fiche

  1. Comprendre SSL/TLS — Chiffrement asymétrique, certificats, CA
  2. Types de certificats — Auto-signé, Let's Encrypt, payant
  3. Installer Certbot — Plugin Apache, obtention du certificat
  4. Configurer HTTPS sur Apache2 — VirtualHost 443, SSLEngine, redirection
  5. Renouvellement automatique — Cron Certbot, vérification

Prérequis

Debian avec Apache2 installé. Un nom de domaine public pointant vers le serveur (pour Let's Encrypt). Port 80 et 443 ouverts dans le pare-feu.

1. Comprendre SSL/TLS

SSL (Secure Sockets Layer) et son successeur TLS (Transport Layer Security) assurent le chiffrement des communications entre le navigateur et le serveur web. HTTPS = HTTP + TLS. Le cadenas vert dans le navigateur indique que la connexion est chiffrée.

Étape TLSDescription
1. ClientHelloLe client indique les versions TLS et algorithmes supportés
2. ServerHelloLe serveur choisit la version et l'algorithme, envoie son certificat
3. Vérification certLe client vérifie que le certificat est signé par une CA de confiance
4. Échange de cléGénération d'une clé de session symétrique (ex: via ECDH)
5. Données chiffréesToutes les données HTTP sont chiffrées avec la clé de session

2. Types de certificats

TypeCoûtValiditéUsage
Auto-signéGratuitIllimitéeLab, dev — avertissement navigateur
Let's Encrypt (DV)Gratuit90 joursSites web publics — renouvellement automatique
Payant DV10-50€/an1-2 ansSites web — même niveau que Let's Encrypt
Payant OV50-200€/an1-2 ansEntreprises — vérification organisation
Payant EV200€+/an1-2 ansBanques, e-commerce — barre verte (obsolète)

3. Générer un certificat auto-signé (lab)

sudo a2enmod ssl
sudo systemctl reload apache2

# Générer clé privée + certificat auto-signé (365 jours)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/ssl/private/monsite.key \
  -out /etc/ssl/certs/monsite.crt \
  -subj "/C=FR/ST=Normandie/L=Avranches/O=NDLP/CN=monsite.local"

4. Installer Certbot (Let's Encrypt)

# Installer Certbot et le plugin Apache
sudo apt install certbot python3-certbot-apache -y

# Obtenir un certificat pour un domaine public
sudo certbot --apache -d monsite.fr -d www.monsite.fr

# Certbot va :
# 1. Vérifier que le domaine pointe bien vers ce serveur (challenge HTTP)
# 2. Générer le certificat
# 3. Modifier automatiquement la config Apache pour HTTPS
ℹ️ Le challenge HTTP-01 de Let's Encrypt crée un fichier temporaire dans /.well-known/acme-challenge/ sur votre serveur. Let's Encrypt accède à ce fichier via http://votre-domaine/.well-known/acme-challenge/ pour vérifier que vous contrôlez le domaine. Le port 80 doit être accessible.

5. Configurer HTTPS manuellement dans Apache2

# VirtualHost HTTPS (/etc/apache2/sites-available/monsite-ssl.conf)
<VirtualHost *:443>
    ServerName www.monsite.fr
    DocumentRoot /var/www/monsite

    SSLEngine on
    SSLCertificateFile     /etc/letsencrypt/live/monsite.fr/fullchain.pem
    SSLCertificateKeyFile  /etc/letsencrypt/live/monsite.fr/privkey.pem

    # En-têtes de sécurité
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"

    <Directory /var/www/monsite>
        Options -Indexes
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog  ${APACHE_LOG_DIR}/monsite-ssl-error.log
    CustomLog ${APACHE_LOG_DIR}/monsite-ssl-access.log combined
</VirtualHost>

# Redirection HTTP vers HTTPS
<VirtualHost *:80>
    ServerName www.monsite.fr
    Redirect permanent / https://www.monsite.fr/
</VirtualHost>

6. Renouvellement automatique

# Certbot installe automatiquement un timer systemd
systemctl status certbot.timer

# Tester le renouvellement (simulation)
sudo certbot renew --dry-run

# Renouveler manuellement si besoin
sudo certbot renew

# Voir les certificats installés
sudo certbot certificates
💡 Let's Encrypt renouvelle automatiquement les certificats 30 jours avant expiration via le timer systemd certbot.timer. Vérifiez que ce timer est actif avec systemctl is-active certbot.timer.

7. Vérifier la configuration SSL

# Tester la connexion SSL depuis le terminal
openssl s_client -connect monsite.fr:443

# Voir la date d'expiration du certificat
echo | openssl s_client -connect monsite.fr:443 2>/dev/null | \
  openssl x509 -noout -dates
Que signifie HTTPS ?
  • HyperText Transfer Protocol Secured
  • High Transfer Protocol with SSL
  • HTTP over TLS/SSL
  • Les réponses A et C sont correctes

✅ Réponse : Les réponses A et C sont correctes

Quelle est la durée de validité d'un certificat Let's Encrypt ?
  • 1 an
  • 2 ans
  • 90 jours
  • 30 jours

✅ Réponse : 90 jours

Quel en-tête HTTP force le navigateur à toujours utiliser HTTPS ?
  • X-Force-HTTPS
  • Strict-Transport-Security (HSTS)
  • X-SSL-Required
  • Content-Security-Policy

✅ Réponse : Strict-Transport-Security (HSTS)

Quelle commande Certbot teste le renouvellement sans l'exécuter ?
  • certbot check
  • certbot test-renew
  • certbot renew --dry-run
  • certbot simulate

✅ Réponse : certbot renew --dry-run

Quelle est la différence entre un certificat auto-signé et un certificat Let's Encrypt ?
  • L'auto-signé est plus sécurisé
  • Let's Encrypt coûte moins cher
  • Un cert auto-signé n'est pas reconnu par les navigateurs — Let's Encrypt est signé par une CA de confiance
  • Il n'y a pas de différence technique

✅ Réponse : Un cert auto-signé n'est pas reconnu par les navigateurs — Let's Encrypt est signé par une CA de confiance