HTTPS Handshake Procedure
Het opzetten van een TLS-verbinding verloopt in een aantal stappen. In de meeste gevallen neemt de hele procedure niet meer dan een seconde in beslag. Wanneer de client en server hebben besloten om de TLS-verbinding te gebruiken
wordt de verbinding verder tot stand gebracht door middel van een ‘handshake’ procedure. Tijdens deze handshake gaan de client en de server akkoord met verschillende parameters om een veilige verbinding tot stand te laten komen:
Hoe een SSL-verbinding tot stand wordt gebracht
- Voordat de SSL verbinding opgezet wordt wisselen de client en de server gegevens uit, bijvoorbeeld het sterkste algoritme en het meest recente SSL/TLS protocol, dat zij beiden ondersteunen.
- De server stuurt een bewijs van zijn identiteit in de vorm van een digitaal certificaat (de public key van het certificaat), wat de client controleert op geldigheid. Zo weet de client zeker met wie hij communiceert. In het geval van tweezijdig SSL vraagt de server op zijn beurt ook een digitaal certificaat aan de client, zodat zowel server als client weten met wie zij communiceren.
- De client maakt gebruik van informatie die door de server is aangeleverd om de server te verifiëren. Als de server niet kan worden geverifieerd, dan wordt de gebruiker gewaarschuwd dat er geen versleutelde verbinding tot stand kan worden gebracht. Pas als de server met succes kan worden geverifieerd, zal de client overgaan tot de volgende stap.
- De client versleutelt een willekeurig getal met de public key van het certificaat dat hij in stap 2 van de server heeft gekregen; dit wordt een zogenaamd sessie-specifiek pre-master secret. De client stuurt deze naar de server, die het pre-master secret als enige kan ontcijferen omdat hij beschikt over de private key van het gebruikte certificaat. Omdat alleen de twee genoemde partijen toegang hebben tot de gebruikte sleutels, kan misbruik door derden worden uitgesloten.
- Als de server client-authenticatie heeft verzocht (in het geval van tweezijdig SSL; een optionele stap in de handshake), dan zal de client een ander uniek stuk data ondertekenen. Deze data is uniek voor deze handshake en is bekend bij zowel de client als de server. In dit geval verzendt de client de ondertekende data, het eigen certificaat van de client en het versleutelde pre-master secret aan de server.
- Als de client niet kan worden geverifieerd, dan wordt de sessie afgesloten. Als de client met succes kan worden geverifieerd, dan zal de server zijn private key gebruiken voor het decoderen van het pre-master secret. Vervolgens voeren zowel de client als de server een reeks stappen uit om een master secret te genereren op basis van het pre-master secret.
- Zowel de client als de server gebruiken het master secret om sessiesleutels te genereren. Dit zijn symmetrische sleutels die gebruikt worden voor het coderen en decoderen van informatie die uitgewisseld wordt tijdens de SSL-sessie en om integriteit te controleren (dat is om eventuele wijzigingen in de gegevens te detecteren tussen het verzenden en ontvangen van de data over de SSL-verbinding).
- De client stuurt een bericht naar de server. Hierin wordt meegedeeld dat toekomstige berichten van de client worden versleuteld met de sessiesleutel. Vervolgens verzendt de client een apart versleuteld bericht dat aangeeft dat het client-onderdeel van de handshake is voltooid.
- De server stuurt een bericht naar de client. Hierin wordt meegedeeld dat toekomstige berichten van de server worden versleuteld met de sessiesleutel. Vervolgens verzendt de server een apart versleuteld bericht dat aangeeft dat het serveronderdeel van de handshake is voltooid.
De SSL Handshake is nu voltooid en de sessie begint. De client en de server gebruiken nu de sessiesleutels om gegevens te versleutelen, ontsleutelen en de integriteit te controleren. Voor iedere sessie (zoals het bezoeken van website) wordt het handshake proces opnieuw uitgevoerd en worden er nieuwe sleutels gebruikt.
(bron: Xolphin.nl)