web browser slot icoon https verbinding

Website WoensdagWat is HTTPS, SSL en TLS en waarom is het belangrijk?

Met HTTPS, TLS en SSL verstuur je informatie over het internet met een end-to-end versleutelde verbinding. Alleen de verzender en ontvanger kunnen de verstuurde informatie zien en aanpassen.

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:

  • e-mail
  • 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):

  1. "Client hello" message bevat:
    • maximale TLS versie
    • random nummer (tegen replay attacks)
    • lijst van cipher suites
  2. "Server hello" message bevat:
    • kiest TLS versie
    • kiest cipher suite
    • random nummer
  3. 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
  4. 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
  5. Cipher spec veranderen: beide partijen versturen een bericht waar de eerder overeengekomen cipher spec en keys nogmaals genoemd worden.
  6. De client en server sturen elkaar een versleuteld bericht waarin ze zeggen dat de key informatie juist is.
  7. 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:

  1. Is het onderwerp (de website) van het certificaat gelijk aan de hostnaam waar de client (browser) mee wil verbinden?
  2. Is het certificaat ondertekend door een vertrouwde CA (Certificate Authority)?
  3. 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