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…
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 … -showcertspour 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.