Sommaire
Comprendre SSL/TLS, générer un certificat Let's Encrypt avec Certbot et configurer HTTPS sur Apache2 sous Debian.
🎯 Objectifs de la fiche
- Comprendre SSL/TLS — Chiffrement asymétrique, certificats, CA
- Types de certificats — Auto-signé, Let's Encrypt, payant
- Installer Certbot — Plugin Apache, obtention du certificat
- Configurer HTTPS sur Apache2 — VirtualHost 443, SSLEngine, redirection
- 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 TLS | Description |
|---|---|
| 1. ClientHello | Le client indique les versions TLS et algorithmes supportés |
| 2. ServerHello | Le serveur choisit la version et l'algorithme, envoie son certificat |
| 3. Vérification cert | Le 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ées | Toutes les données HTTP sont chiffrées avec la clé de session |
2. Types de certificats
| Type | Coût | Validité | Usage |
|---|---|---|---|
| Auto-signé | Gratuit | Illimitée | Lab, dev — avertissement navigateur |
| Let's Encrypt (DV) | Gratuit | 90 jours | Sites web publics — renouvellement automatique |
| Payant DV | 10-50€/an | 1-2 ans | Sites web — même niveau que Let's Encrypt |
| Payant OV | 50-200€/an | 1-2 ans | Entreprises — vérification organisation |
| Payant EV | 200€+/an | 1-2 ans | Banques, 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
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
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
- ☐ Module SSL Apache activé (a2enmod ssl)
- ☐ Certificat généré (auto-signé ou Let's Encrypt)
- ☐ VirtualHost HTTPS configuré sur le port 443
- ☐ Redirection HTTP vers HTTPS active
- ☐ Site accessible via https://
- ☐ En-têtes de sécurité ajoutés (HSTS, X-Frame-Options)
- ☐ Renouvellement automatique vérifié (certbot renew --dry-run)
Que signifie HTTPS ?
✅ Réponse : Les réponses A et C sont correctes
Quelle est la durée de validité d'un certificat Let's Encrypt ?
✅ Réponse : 90 jours
Quel en-tête HTTP force le navigateur à toujours utiliser HTTPS ?
✅ Réponse : Strict-Transport-Security (HSTS)
Quelle commande Certbot teste le renouvellement sans l'exécuter ?
✅ Réponse : certbot renew --dry-run
Quelle est la différence entre un certificat auto-signé et un certificat Let's Encrypt ?
✅ Réponse : Un cert auto-signé n'est pas reconnu par les navigateurs — Let's Encrypt est signé par une CA de confiance