Devmind.
Menu

Apprendre, à votre rythme

Tous les cursus sont accessibles sans compte.

Chapitre 8 / Notion

Handshake TLS pas à pas

« C'est chiffré » ne suffit pas : versions obsolètes, SNI, reprise de session — le handshake explique 90 % des erreurs TLS bizarres (vieux client, certificat « pourtan…

◷ 15 minutesTravail sur votre machine

Prérequis (cursus dev) : ce que HTTPS protège ; cours DevOps 3.3 (TLS) pour la partie ops.

Pourquoi

« C'est chiffré » ne suffit pas : versions obsolètes, SNI, reprise de session — le handshake explique 90 % des erreurs TLS bizarres (vieux client, certificat « pourtant valide », lenteurs).

Concepts

  • ClientHello / ServerHello : le client annonce versions + suites supportées et le SNI (le domaine, en clair) ; le serveur choisit et envoie son certificat. D'où : SNI observé par les intermédiaires (vie privée !), et SNI faux = mauvais certificat.
  • Échange de clés : ECDHE (échange éphémère — forward secrecy : même avec la clé privée volée plus tard, le passé reste illisible) puis chiffrement symétrique (rapide) pour la suite.
  • Versions : TLS 1.2 minimum tolérable, 1.3 recommandé (handshake en 1 RTT, suites réduites aux sûres, moins d'allers-retours = plus rapide). SSL 2/3 et TLS 1.0/1.1 = morts (POODLE et amis).
  • Reprise (session resumption / tickets) : éviter le handshake complet à chaque visite — vital sur mobile à forte latence.

Exemple : voir la négociation

openssl s_client -connect example.com:443 -tls1_3 2>/dev/null | grep -i "protocol\|cipher"
# Protocol  : TLSv1.3 / Cipher : TLS_AES_256_GCM_SHA384 → sain
# Échec en tls1_3 mais ok sans : serveur bloqué en 1.2 — à monter

Cas réel

Vieux terminal de paiement qui « ne se connecte plus » après durcissement : il ne parlait que TLS 1.0. Le durcissement était juste, mais il fallait inventorier les clients avant — la compatibilité se mesure, pas se suppose.

Pièges

  • Forcer 1.3 partout sans inventaire clients : les vieux équipements meurent en silence.
  • Certificat valide mais chaîne incomplète (intermédiaire manquant) : OK sur desktop (cache), KO sur mobile. openssl … -showcerts pour voir la chaîne servie.
  • Confondre « chiffré » et « authentifié » : sans vérification du certificat (curl -k !), le chiffrement protège… de personne (MITM).

À retenir

Hello + SNI, ECDHE = passé protégé, 1.3 par défaut + inventaire avant de durcir, chaîne complète.

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