TLS, certificats et headers
HTTPS n'est plus une option : navigateurs qui alertent, SSO qui l'exige, cookies Secure qui le supposent.
Prérequis (cursus dev) : ce que HTTPS protège, clés et certificats, certificats ACME.
Pourquoi
HTTPS n'est plus une option : navigateurs qui alertent, SSO qui l'exige, cookies Secure qui le supposent. Bonne nouvelle : c'est largement automatisable. Mauvaise : l'automatique qui casse en silence fait très mal au bout de 90 jours (durée de vie d'un certificat Let's Encrypt).
Concepts
- SNI (Server Name Indication) : l'extension TLS par laquelle le client annonce le domaine visé avant le chiffrement — ce qui permet plusieurs certificats sur la même IP. Un « SNI foireux » (mauvais domaine annoncé) sert le mauvais certificat.
- HSTS : ordre au navigateur « plus jamais de HTTP pour ce domaine » (
max-age= durée en secondes,includeSubDomains= étendu aux sous-domaines). À n'activer que quand le HTTPS est solide, sinon on se lock dehors. - CSP (Content Security Policy) : liste blanche des sources autorisées (scripts, images…).
Report-Only= mode observation (signale sans bloquer) : toujours commencer par là.
Exemple : diagnostiquer et durcir
echo | openssl s_client -connect app.example.fr:443 -servername app.example.fr 2>/dev/null \
| openssl x509 -noout -dates -issuer
# -servername = force le SNI (sans lui, test faussé derrière un proxy multi-domaines)
Headers (Caddy) :
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff" # interdit au navigateur de deviner le type (anti-sniffing)
X-Frame-Options "DENY" # interdit l'affichage en iframe (anti-clickjacking)
Referrer-Policy "strict-origin-when-cross-origin"
}
Renouvellement auto ~30 jours avant expiration — mais un port 80 bloqué ou 5 échecs/heure (rate limit Let's Encrypt) le font échouer en silence. Alerte si expiration < 21 jours.
Cas réel
Site « sécurisé » avec HSTS activé… puis certificat expiré un dimanche : les visiteurs ne peuvent plus passer outre l'avertissement (c'est le but d'HSTS) et le site est vraiment down. HSTS sans monitoring d'expiration = piège à retardement.
Pièges
- CSP posée en blocage direct : casse les scripts tiers un vendredi soir. Toujours Report-Only d'abord.
- Oublier
includeSubDomains… ou l'ajouter sans avoir migré les sous-domaines : lock-out en prime. - Tester le certificat depuis le serveur lui-même (hosts local, proxy interne) : tester depuis l'extérieur.
À retenir
TLS auto mais surveillé, SNI compris, HSTS quand solide, CSP en observation d'abord.