TLS (transport layer security) is het beveiligde communicatieprotocol dat door een groot deel van het internet wordt gebruikt. Van de versleutelde verbinding waarmee uw webbrowser websites opent tot de beveiligde verbindingen van uw bankapps: TLS is de industriestandaard en de reden dat u gevoelige informatie met vertrouwen online kunt versturen.
In deze gids leest u wat een TLS handshake is, hoe deze werkt en welke rol hij speelt in netwerkbeveiliging en in het privé houden van uw communicatie, zodat die niet wordt onderschept of gemanipuleerd.
Wat is een TLS handshake?
TLS-encryptie is het standaard cryptografische protocol om netwerkcommunicatie te beveiligen, inclusief de gegevens die u via het internet verstuurt.
Voordat versleutelde communicatie kan plaatsvinden, moet er vertrouwen worden opgebouwd tussen de twee communicerende partijen (bijvoorbeeld de webserver die een website host en de webbrowser waarmee u die website bezoekt).
Dat is precies wat de TLS handshake doet: hij brengt een beveiligd kanaal tot stand tussen client en server door af te stemmen welke TLS-versies en cipher suites beide partijen ondersteunen, de identiteit van de server te verifiëren aan de hand van de publieke sleutel en het SSL-certificaat, en ten slotte sessiesleutels te genereren waarmee de verbinding uniek wordt versleuteld.
TLS versus SSL
TLS is de opvolger van SSL (Secure Sockets Layer) en verving dat protocol als de encryptielaag onder HTTPS (het beveiligde HTTP-protocol dat webpagina’s naar uw browser en gegevens naar uw apps stuurt). TLS wordt ook gebruikt door andere software die beveiligde netwerkcommunicatie vereist, zoals VPN-oplossingen.
De cryptografische bouwstenen
TLS-encryptie steunt op een aantal cryptografische elementen en concepten:
- De cipher suite: de cipher suite is het algoritme waarmee een met TLS versleutelde verbinding wordt beveiligd. Elke suite bevat een sleuteluitwisselingsalgoritme, een bulkencryptie-algoritme en een MAC-algoritme (message authentication code).
- Symmetrische encryptie: server en client gebruiken één en dezelfde cryptografische sleutel om de verbinding te beveiligen. Beide partijen moeten die sleutel kennen en geen enkele derde partij mag hem kennen of kunnen raden, anders is de beveiliging van de verbinding in gevaar.
- Asymmetrische encryptie: ook bekend als publiekesleutelencryptie. Bij deze methode gebruiken server en client aparte privé- en publieke sleutels om gegevens te versleutelen en de verbinding te beveiligen. De privésleutel is nodig om gegevens te ontsleutelen die met de publieke sleutel zijn versleuteld.
- Authenticatie: om veilig verbinding te maken met een server (en niet met een bedrieger) moet die server zijn identiteit onomstotelijk kunnen aantonen via authenticatie.
TLS-versies en compatibiliteit
TLS 1.0 verscheen in 1999, TLS 1.1 in 2006, TLS 1.2 in 2008 en de nieuwste versie TLS 1.3 in 2018. Elke release bracht flinke beveiligingsverbeteringen met zich mee, waaronder extra cipher suites en bescherming tegen nieuwe aanvallen.
De meeste servers ondersteunen zowel TLS 1.3 als TLS 1.2 voor achterwaartse compatibiliteit met oudere clients.
Het verloop van een TLS handshake, stap voor stap
TLS 1.3 stroomlijnt het handshake-proces aanzienlijk en maakt het veiliger dan bij eerdere versies. Zo verloopt het beveiligen van een TLS 1.3-verbinding in detail:
- Client hello: de client stuurt een “hello”-bericht naar de server om de TLS handshake en de verbinding te starten. Dat bericht bevat de TLS-versies, cipher suites, key share-methode en extensies die de client ondersteunt. Het bevat ook de “client random”: willekeurige gegevens die worden gebruikt om het master secret te genereren. In veel gevallen kunnen ook de parameters voor het premaster secret al worden gegenereerd, namelijk wanneer de client kan raden welke key share-methode de server zal gebruiken (vaak het geval doordat TLS 1.3 minder cipher suites ondersteunt). Dat scheelt een aantal round-trips tussen client en server.
- Master secret: de server kiest een TLS-versie, cipher suite en key share die compatibel zijn met de client en genereert zijn eigen “server random”. Zodra client en server beschikken over de client random, het premaster secret en de server random kunnen ze onafhankelijk van elkaar hetzelfde master secret genereren.
- Server hello en asymmetrische communicatie: de server antwoordt op de client hello met de gekozen TLS-versie, cipher suite en het SSL/TLS-certificaat van de server, dat de publieke sleutel en de certificeringsinstantie (CA) bevat. De client kan de identiteit van de server verifiëren bij die CA.
- Genereren van sessiesleutels: client en server genereren overeenkomende sessiesleutels op basis van het master secret.
- “Finished”-berichten en symmetrische communicatie: client en server wisselen “finished”-berichten uit met de symmetrische sessiesleutel en een hash van het doorlopen handshake-proces, om te garanderen dat er niet mee is geknoeid. De TLS handshake is afgerond zodra beide partijen de “finished”-berichten hebben ontsleuteld en gevalideerd.
Zodra de TLS handshake is afgerond, kan de verbinding worden gebruikt om gegevens veilig te versturen met de symmetrische sessiesleutels.
Problemen met de TLS handshake oplossen
De meest voorkomende oorzaak van problemen met de TLS handshake is een verkeerd ingestelde tijd op de server of de client (eenvoudig te verhelpen). Verouderde CA’s op de client zijn ook een mogelijke oorzaak als uw besturingssysteem al een tijd geen update heeft gekregen.
Aan de serverkant mislukken TLS-verbindingen als er geen TLS-versies of cipher suites zijn die beide partijen ondersteunen, als het SSL/TLS-certificaat is ingetrokken door de CA of verlopen is of als de hostnaam van de server niet overeenkomt met die op het certificaat.
Bij problemen met de netwerkverbinding of bij een trage server kan een TLS handshake mislukken doordat deze door latency een time-out krijgt.
Beveilig uw gebruikerssessies vanaf het eerste moment. Bekijk nu wat een TLS handshake is.
Beveiligde communicatieprotocollen zijn niet volledig veilig
TLS vormt op dit moment de basis van de netwerkbeveiliging van vrijwel alles wat er online gebeurt. Maar dat het gegevens veilig kan versturen (na de o zo belangrijke TLS handshake) betekent niet dat wat er veilig wordt verstuurd ongevaarlijk is.
Een beveiligde verbinding met een website betekent niet dat die website geen virus kan hosten. Download software dus alleen van betrouwbare websites (of nog beter: uit officiële app stores). Runt u een bedrijf, bescherm en beveilig uw infrastructuur dan met robuust endpoint management.
