TLS & HTTPS â Let's Encrypt wildcard, HSTS, OCSP
Prérequis : Apache installé (
02-stack-web.md), domaine DNS configuré chez OVH. Telaria utilise des certificats wildcard (*.telaria.dev) pour couvrir tous les sous-domaines avec un seul certificat.
1. Pourquoi un certificat wildcard ?
Un certificat standard (telaria.dev, www.telaria.dev) nĂ©cessite d'ajouter explicitement chaque sous-domaine. Un certificat wildcard (*.telaria.dev) couvre automatiquement tous les sous-domaines de premier niveau â indispensable pour le multisite Telaria oĂč de nouveaux sites peuvent apparaĂźtre sans reconfigurer les certificats.
2. Certbot avec DNS-01 (plugin OVH)
La validation DNS-01 prouve la propriété du domaine en créant un enregistrement DNS temporaire, sans exposer de port HTTP. C'est la seule méthode qui permet les wildcards.
Installation
sudo apt install -y certbot python3-certbot-dns-ovh
Credentials OVH API
Créer une application OVH pour obtenir les clés API :
- Aller sur https://www.ovh.com/auth/api/createApp
- Créer une app avec droits DNS (
GET /domain/zone/*,POST /domain/zone/*,DELETE /domain/zone/*)
sudo nano /etc/letsencrypt/ovh.ini
dns_ovh_endpoint = ovh-eu dns_ovh_application_key = XXXXXXXXXXXXXXXX dns_ovh_application_secret = YYYYYYYYYYYYYYYY dns_ovh_consumer_key = ZZZZZZZZZZZZZZZZ
sudo chmod 600 /etc/letsencrypt/ovh.ini
Obtenir le certificat wildcard
sudo certbot certonly \ --dns-ovh \ --dns-ovh-credentials /etc/letsencrypt/ovh.ini \ -d telaria.dev \ -d "*.telaria.dev" \ --email admin@telaria.dev \ --agree-tos \ --non-interactive
Certbot crĂ©e un enregistrement _acme-challenge.telaria.dev temporaire, attend la propagation DNS, puis supprime l'enregistrement. DurĂ©e : ~30â60 secondes.
Fichiers générés
/etc/letsencrypt/live/telaria.dev/ âââ fullchain.pem â cert + chain (Ă utiliser dans SSLCertificateFile) âââ privkey.pem â clĂ© privĂ©e âââ cert.pem â cert seul âââ chain.pem â chain seul
3. Renouvellement automatique
Les certificats Let's Encrypt expirent aprĂšs 90 jours. Certbot installe un timer systemd qui renouvelle automatiquement avant expiration.
# Vérifier le timer sudo systemctl status certbot.timer # Tester le renouvellement (dry-run, sans modifier les certs) sudo certbot renew --dry-run # Forcer un renouvellement immédiat sudo certbot renew --force-renewal && sudo systemctl reload apache2
Le timer tourne deux fois par jour. Certbot renouvelle uniquement si l'expiration est dans moins de 30 jours.
Hook post-renouvellement
Apache doit ĂȘtre rechargĂ© aprĂšs chaque renouvellement pour prendre en compte les nouveaux fichiers :
# /etc/letsencrypt/renewal-hooks/post/reload-apache.sh #!/bin/bash systemctl reload apache2
sudo chmod +x /etc/letsencrypt/renewal-hooks/post/reload-apache.sh
4. OCSP Stapling â accĂ©lĂ©rer la nĂ©gociation TLS
Sans OCSP stapling, le navigateur doit contacter le CA (Let's Encrypt) pour vĂ©rifier que le certificat n'est pas rĂ©voquĂ© â latence supplĂ©mentaire. Avec le stapling, c'est le serveur qui fait cette vĂ©rification et inclut la rĂ©ponse signĂ©e dans la poignĂ©e de main TLS.
Configuration Apache (niveau serveur, dans ssl.conf ou dans chaque vhost) :
# /etc/apache2/conf-available/ocsp-stapling.conf SSLUseStapling On SSLStaplingCache "shmcb:${APACHE_LOG_DIR}/stapling_cache(128000)" SSLStaplingReturnResponderErrors Off SSLStaplingResponderTimeout 5
sudo a2enconf ocsp-stapling
sudo systemctl reload apache2
Vérification :
openssl s_client -connect telaria.dev:443 -servername telaria.dev -status < /dev/null \ | grep -A3 "OCSP Response Status" # Attendu : OCSP Response Status: successful (0x0)
5. HSTS â forcer HTTPS cĂŽtĂ© navigateur
HSTS (HTTP Strict Transport Security) demande aux navigateurs de refuser toute connexion HTTP pour ce domaine pendant la durĂ©e dĂ©finie â mĂȘme si l'utilisateur tape http://.
# Dans le vhost HTTPS (port 443) Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
| Directive | Effet |
|---|---|
max-age=31536000 |
Mémorisation 1 an |
includeSubDomains |
S'applique aussi Ă *.telaria.dev |
preload |
ĂligibilitĂ© Ă la preload list HSTS (navigateurs l'appliquent dĂšs la 1Ăšre visite) |
â ïž
preloadest irréversible à court terme. Ne l'activer qu'une fois HTTPS stable sur tous les sous-domaines. Soumission sur https://hstspreload.org.
6. Versions TLS et ciphers
Désactiver TLS 1.0 et 1.1 (obsolÚtes, vulnérables) :
# /etc/apache2/mods-available/ssl.conf SSLProtocol -all +TLSv1.2 +TLSv1.3 SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:\ ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:\ ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:\ DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 SSLHonorCipherOrder off # TLS 1.3 ignore cette directive (le client choisit)
7. Vérification complÚte
# Grade SSL curl -s "https://api.ssllabs.com/api/v3/analyze?host=telaria.dev&startNew=on" | jq .status # Test rapide en ligne de commande openssl s_client -connect telaria.dev:443 -servername telaria.dev < /dev/null 2>&1 | grep -E "Protocol|Cipher|subject" # Vérifier la date d'expiration echo | openssl s_client -connect telaria.dev:443 2>/dev/null | openssl x509 -noout -dates
Ătape suivante : 05-securite.md