03-comment-je-travaille/vps/04-tls-https.md

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 :

  1. Aller sur https://www.ovh.com/auth/api/createApp
  2. 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)

⚠ preload est 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

Assistant documentaire

Posez une question sur la documentation. Les rĂ©ponses citent leurs sources — un clic ouvre le document Ă  gauche.

Loading…
Loading the web debug toolbar…
Attempt #