Een TLS-handshake is de onderhandeling die aan het begin van elke HTTPS-verbinding plaatsvindt, waarin de client en server elkaar authenticeren (server altijd; client optioneel), een protocolversie en ciphersuite afspreken en gedeelde versleutelingssleutels tot stand brengen.
In TLS 1.3 (de huidige standaard) is de handshake meestal in één ronde voltooid: de client stuurt een ClientHello met ondersteunde versies, ciphersuites en een kortstondig sleuteluitwisselingspunt; de server antwoordt met een ServerHello, haar certificaatketen, een handtekening die bewijst dat zij de privésleutel heeft, en een Finished-bericht. De client verifieert het certificaat tegen vertrouwde certificaatautoriteiten, stuurt haar eigen Finished, en beide partijen leiden verkeerssleutels af van het gedeelde geheim. Versleutelde toepassingsgegevens kunnen dan onmiddellijk worden uitgewisseld.
Wanneer je https://example.com bezoekt, start na TCP-verbinding de TLS-handshake. De server presenteert haar SSL-certificaat voor example.com, ondertekend door een certificaatautoriteit. De browser verifieert de certificaatketen, voert sleuteluitwisseling uit en bevestigt de identiteit van de server. Alleen nadat dit slaagt, begint de versleutelde HTTPS-sessie.
WarningEen handshake-fout—weergegeven als "geen cipher overlap" of certificaat mismatch—betekent vaak dat de client en server het niet eens zijn over protocolversie of ciphers (bijvoorbeeld legacy TLS 1.0 versus een beveiligde server die TLS 1.2+ vereist), of het certificaat komt niet overeen met het domein dat via SNI is aangevraagd. Controleer altijd of de TCP-verbinding afzonderlijk is geslaagd voordat je de schuld op de TLS-laag geeft.
De TLS-handshake verschilt van de TCP-handshake die hieraan voorafgaat; de twee worden vaak verward maar vinden opeenvolgend plaats.