Devmind.
Menu

Apprendre, à votre rythme

Tous les cursus sont accessibles sans compte.

Chapitre 3 / Notion

TLS, certificats et headers

HTTPS n'est plus une option : navigateurs qui alertent, SSO qui l'exige, cookies Secure qui le supposent.

◷ 20 minutesTravail sur votre machine

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.

Pas de correction en ligneConfrontez votre code aux résultats attendus du cours.