Une poignée de main TLS est la négociation qui se produit au début de chaque connexion HTTPS, où le client et le serveur s'authentifient mutuellement (le serveur toujours ; le client optionnellement), conviennent d'une version de protocole et d'une suite de chiffrement, et établissent des clés de chiffrement partagées.
Dans TLS 1.3 (la norme actuelle), la poignée de main se déroule généralement en un seul aller-retour : le client envoie un ClientHello avec les versions, les suites de chiffrement et un partage de clé éphémère supportés ; le serveur répond avec un ServerHello, sa chaîne de certificats, une signature prouvant qu'il détient la clé privée, et un message Finished. Le client vérifie le certificat par rapport aux autorités de certification approuvées, envoie son propre Finished, et les deux côtés dérivent les clés de trafic du secret partagé. Les données d'application chiffrées peuvent alors circuler immédiatement.
Lorsque vous visitez https://example.com, après la connexion TCP, la poignée de main TLS commence. Le serveur présente son certificat SSL pour example.com, signé par une autorité de certification. Le navigateur vérifie la chaîne de certificats, effectue l'échange de clés et confirme l'identité du serveur. Ce n'est qu'après cette vérification que la session HTTPS chiffrée débute.
WarningUn échec de poignée de main—affiché comme « aucun chevauchement de chiffrement » ou incompatibilité de certificat—indique souvent que le client et le serveur ne peuvent pas convenir d'une version de protocole ou de chiffrement (par exemple, TLS 1.0 hérité par rapport à un serveur renforcé nécessitant TLS 1.2+), ou le certificat ne correspond pas au domaine demandé via SNI. Vérifiez toujours que la connexion TCP s'est établie séparément avant de blâmer la couche TLS.
La poignée de main TLS est distincte de la poignée de main TCP qui la précède ; les deux sont souvent confondues mais se produisent séquentiellement.