Too Long; Didn't Read
Transport Layer Security (TLS) is een cryptografisch protocol waarmee data (informatie) die tussen 2 partijen over het internet verstuurd wordt, niet door andere partijen bekeken of aangepast kan worden. Secure Sockets Layer (SSL) is de voorloper van TLS en niet meer in gebruik. Wanneer iemand het nu over SSL of een SSL certificaat heeft, gaat het over TLS. Wanneer Hypertext Transfer Protocol (HTTP) met TLS beveiligd is, noemen we het Hypertext Transfer Protocol Secure (HTTPS).
Informatie die we over het internet versturen, wordt op vrijwel iedere website beveiligd met TLS. Als je in de URL balk van je browser een slotje ziet en de URL begint met HTTPS, weet je dat de informatie die je van de server ontvangt en naar de server toe stuurt end-to-end beveiligd is. Dit betekent dat andere partijen de gestuurde informatie niet kunnen bekijken en/of aanpassen.
Wanneer je iemand over SSL of een SSL certificaat hoort praten, bedoelen ze TLS. SSL is de voorloper van TLS en wordt tegenwoordig niet meer gebruikt (behalve de naam dan).
Wat is TLS (of SSL)?
Transfer Layer Security (TLS) is een cryptografisch protocol waarmee informatie tussen twee partijen via een veilige verbinding over het internet verstuurd kan worden. Vrijwel iedereen kent het slotje in je browser en HTTPS in de URL van de website die je bezoekt. Deze verbinding, tussen jouw web browser en de website is end-to-end beveiligd. Dit betekent dat niemand de data die je naar de website server stuurt of van de website server ontvangt kan bekijken of aanpassen.
Je kan het vergelijken met een brief in een envelop en een ansichtkaart. Wanneer je de ansichtkaart in de brievenbus stopt, kan iedereen de tekst op de kaart lezen of zelfs veranderen. Dit is een website met HTTP, de informatie gaat van A naar B en daartussen kan iedereen jouw vakantiegroet aan Pietje lezen en 'Hallo, ik was hier!' op je kaart schrijven. Wanneer je de brief in een envelop met jouw geheime familierecept op de bus doet, is het recept alleen voor jou en de ontvanger van de brief leesbaar. Een tussenpersoon kan geen ingrediënt toevoegen of weghalen. Dit is een HTTPS website, de informatie gaat van A naar B en niemand kan onderweg je recept bekijken of veranderen.
TLS wordt ook gebruikt voor:
- het versturen van bestanden (file transfers)
- audio en video bellen
- instant messaging
- VoIP (voice-over-IP)
- uploaden van bijvoorbeeld YouTube video's
- en nog veel meer internet diensten
Secure Sockets Layer (SSL) en TLS worden vaak door elkaar gebruikt. Dit is begrijpelijk, SSL is de naam van de vroege versies van het cryptografische protocol dat Netscape in de vroege jaren '90 ontwikkelde om veilige netwerkverbindingen te maken. In 1996 werd de TLS werkgroep door het Internet Engineering Task Force (IETF) opgericht om verder te werken aan SSL/TLS.
Het is goed om te onthouden dat TLS níet de data op de systemen van de ontvanger en verzender beveiligt. TLS verzekert de veilige bezorging van data over het internet, waarmee eventueel bekijken of aaanpassing van de inhoud voorkomen wordt.
Waarom SSL (TLS :)) op je website gebruiken?
De meeste web browsers geven niet te missen waarschuwingen bij HTTP websites, waardoor een website zonder HTTPS moeilijk toegankelijk is. Daarnaast is het een van de vele signals voor Google Ranking. Verder is een beveiligde verbinding met een website (HTTPS in plaats van HTTP) met TLS (SSL) met de komst van de Algemene Verordening Persoonsgegevens (AVG) in 2018 voor veel websites wettelijk verplicht.
Hoe werkt TLS?
TLS gebruikt een combinatie van symmetrische en asymmetrische cryptografie. Deze combinatie is een goed compromis tussen performance en veiligheid.
Symmetrische cryptografie
Bij symmetrische cryptografie is de geheime sleutel (secret key) die gebruikt wordt om de data te versleutelen en ontsleutelen bij zowel de verzender als ontvanger bekend. Het resultaat zijn snelle en efficiënte berekeningen, maar ook een probleem.. Hoe wordt de gezamelijke secret key op een veilige manier gedeeld?
Asymmetrische cryptografie
Asymmetrische cryptografie maakt gebruik van 'key pairs'. Je hebt een publieke sleutel en een privé sleutel. Je kan met de publieke sleutel de privé sleutel berekenen, maar zolang de sleutel uit genoeg karakters bestaat is het tijdrovend en onpraktisch om dit te doen. Met de publieke sleutel van de ontvanger kan de verzender de informatie die gestuurd moet worden versleutelen. Vervolgens kan alleen de ware ontvanger met hun privé sleutel de informatie ontcijferen.
Asymmetrische cryptografie wordt gebruikt voor het genereren en uitwisselen van de sessie sleutel. Deze de sessie sleutel is voor de rest van de sessie de secret key bekend bij beide partijen. Deze uitwisseling is onderdeel van de TLS handshake.
Naast een veilige manier om data over het internet te versturen, is het ook belangrijk dat de web browser, de verzender, kan controleren of de publieke sleutel van de ontvanger (de server) daarwerkelijk de eigenaar van die sleutel is. Dit bewijst de server met een digitaal certificaat waarop de autenticiteit van de publieke sleutel wordt bevestigd. Het certificaat wordt door een Certificate Autority (CA) uitgegeven.. De CA bevestigd de autenticiteit van de publieke sleutel. Een voorbeeld van een CA is Let's Encrypt.
Certificaten kunnen self-signed zijn. Deze certificaten zijn dus niet door een onafhankelijke CA uitgegeven. Deze certificaten zullen waarschijnlijk een browser waarschuwing veroorzaken en zijn alleen in uitzonderlijke gevallen acceptabel, bijvoorbeeld in een private network.
Wat is een TLS handshake?
Een TLS handshake is een supersnelle 'onderhandeling' tussen de client en de server die plaatsvindt na het eerste verzoek van de client voor een website. Tijdens de handshake wordt de authenticiteit van de server gecontroleerd, en bepalen de partijen het encryptie algoritme en de cryptografische sleutels. Dit gebeurt allemaal vóór de eerste data byte wordt verstuurd. Het TLS handshake protocol bestaat uit de volgende stappen (in het geval van TLS 1.2):
- "Client hello" message bevat:
- maximale TLS versie
- random nummer (tegen replay attacks)
- lijst van cipher suites
- "Server hello" message bevat:
- kiest TLS versie
- kiest cipher suite
- random nummer
- Server key exchange bevat:
- SSL/TLS certificaat -> client checkt certificaat
- public key (PK) en handtekening. De PK staat ook op het certificaat, de PK door de server en client gebruikt om het HTTP verkeer te versleutelen.
- Server eindigt met 'server hello done' bericht
- Client key exhange bevat:
- genereert een willekeurige session key (een pre-master key)
- versleutel de session key met de PK van de server
- verstuurt de versleutelde session key naar de server.
- De versleutelde (encryption) session key kan alleen door de private key van de server ontcijferd (decryption) worden. De session key is gelding voor 1 sessie
- Cipher spec veranderen: beide partijen versturen een bericht waar de eerder overeengekomen cipher spec en keys nogmaals genoemd worden.
- De client en server sturen elkaar een versleuteld bericht waarin ze zeggen dat de key informatie juist is.
- Nu is het HTTP verkeer tussen de client en de server versleuteld.
Wat is een SSL certificaat?
Een SSL certificaat, ofwel digitaal certificaat is een elektronisch document dat de server tijdens de TLS handshake stuurt om te bewijzen dat de server de eigenaar van de publieke sleutel is. De browser controleert de volgende dingen:
- Is het onderwerp (de website) van het certificaat gelijk aan de hostnaam waar de client (browser) mee wil verbinden?
- Is het certificaat ondertekend door een vertrouwde CA (Certificate Authority)?
- Is het certificaat geldig? Een certificaat heeft een start en eind datum. Voor en na deze datum is een certificaat niet geldig en zal de browser een waarschuwing geven. Sommige certificaten zijn een jaar geldig, maar veel certificaten zijn veel korter geldig. Bijvoorbeeld CA Let's Encrypt geeft certificaten uit die 90 dagen geldig zijn. Waarom? Let's Encrypt ziet het als een aanmoediging voor systeembeheerders om het SSL proces te automatiseren en vindt dat het de veiligheid vergroot.
Hoe kan je een digitaal certificaat (een SSL certificaat) krijgen?
- Via je hosting provider
- Via Certbot, een gratis, open source software tool van Electronic Frontier Foundation (EFF). Hiermee kan je gratis Let's Encrypt certificaten op je website gebruiken. BELANGRIJK: je hebt wel toegang tot de server en sudo privileges nodig.
- Google geeft in Enabling HTTPS on your servers een uitgebreide uitleg hoe je met o.a. OpenSSL je website met HTTPS kan beveiligen.
Wat is HTTPS, SSL en TLS niet?
Het is geen garantie dat de wébsite die je bezoekt veilig is en geen kwade bedoelingen heeft. HTTPS betekent alleen dat je verbonden bent met de website waarmee je wilde verbinden en dat die verbinding en de communicatie tussen je web browser en de website server end-to-end versleuteld is.
FAQ
SSL staat voor Secure Sockets Layer.
TLS staat voor Transport Layer Security.
SSL (Secure Sockets Layer) is de voorloper van TLS (Transport Layer Security). SSL is in de jaren '90 door Netscape ontwikkeld. In 1996 heeft de TLS werkgroep de ontwikkeling overgenomen van Netscape. Als iemand het nu over een geldig SSL certificaat hebben ze het over certificaten die het TLS 1.2 of 1.3 protocol gebruiken.
HTTPS staat voor Hypertext Transfer Protocol Secure. Het is de beveiligde variant van HTTP (Hypertext Transfer Protocol). HTTPS wordt beveiligd met het TLS protocol.
Hangt er vanaf. Als je toegang tot je server hebt en de juiste sudo privileges kan je met Certbot, het gratis, open-source programma van Electronic Frontier Foundation (EFF) een HTTPS certificaat ondertekend door Let's Encrypt op je website installeren.
Heb je geen sudo toegang? Certbot heeft een lijst van hosting providers die gratis HTTPS certificaten aanbieden.
Ik gebruik zelf al jaren Certbot voor mijn eigen websites en ben erg tevreden. Certbot is door een betrouwbare organisatie (EFF) ontwikkeld, is eenvoudig te installeren en aan te passen en makkelijk te automatiseren.
Wanneer je web browser de waarschuwing 'Verbinding met de site is niet veilig' geeft als je naar een website gaat, betekent dit dat de website geen TLS (eerder SSL) certificaat heeft. Dit SSL/TLS certificaat wordt gebruikt om alle berichten tussen je web browser en de website te versleutelen. Door deze encryptie (versleuteling) kan niemand anders de communicatie tussen jouw web browser en de website die je bezoekt bekijken of veranderen.
Verder kan je web browser met het certificaat controleren dat je inderdaad met de bijvoorbeeld nu.nl server communiceert en niet met een andere website server die beweert nu.nl te zijn.
Aan het slotje in de browser naast de URL balk en de 's' in https:// in de website URL kan je zien dat de verbinding met de website die je bezoekt versleuteld is, dus niet leesbaar of aan te passen door andere partijen. HTTPS of het slotje in de URL balk betekent niet dat de website zelf geen kwade bedoelingen heeft. Ook onbetrouwbare websites of websites met kwade bedoelingen kunnen HTTPS op hun website installeren, dus HTTPS en het slotje laten alleen zien dat je verbinding met de website versleuteld is en dat je verbonden bent met de juiste website.
(in Firefox)
- klik op het slotje in de URL balk
- klik 'veilige verbinding' (connection secure)
- klik 'meer informatie' (more information)
- direct onder het kopje Technische Details (Technical Details) zie je een lange rij letters en getallen tussen haakjes, helemaal aan het eind zie je de TLS versie
TLS 1.2 en TLS 1.3 worden op dit moment als veilig gezien.
Het NCSC (Nationaal Cyber Security Centrum) zegt in de ICT-beveiligingsrichtlijnen voor TLS (bedoeld als advies bij het inkopen, opstellen en beoordelen van configuraties voor het TLS protocol):
Het NCSC heeft besloten TLS 1.2 in veiligheidsniveau af te schalen van Goed naar Voldoende. TLS 1.3, een grondige herziening van TLS op basis van moderne inzichten, blijft Goed. Het NCSC beschouwt TLS 1.2 daarmee nog steeds als veilig, maar minder toekomstvaste optie dan TLS 1.3.