Publicatie:HTTPS

From Meemoo Kennisbank
Jump to navigation Jump to search


Samenvatting

Eén van de beste maatregelen om bezoekers van je website te beschermen tegen malafide hackers (crackers), is het activeren van HTTPS of HyperText Transfer Protocol Secure. Dit is een beveiligd protocol voor communicatie via het internet. Het is een uitbreiding van het (oudere) HTTP-protocol dat kwetsbaar is voor kwaadwillige aanvallen.


Referentie
Titel HTTPS (Voorkeurstitel)
Locatie META nummer 2016/4
Uitgever
Jaar van uitgave 2016
Rechten CC-BY-SA
Persistent ID


Auteur

Pieter De Praetere (PACKED vzw)

Beveiligd internetprotocol

Eén van de beste maatregelen om bezoekers van je website te beschermen tegen malafide hackers (crackers), is het activeren van HTTPS of HyperText Transfer Protocol Secure. Dit is een beveiligd protocol voor communicatie via het internet. Het is een uitbreiding van het (oudere) HTTP-protocol dat kwetsbaar is voor kwaadwillige aanvallen. Er zijn grosso modo twee soorten aanvallen op de communicatie tussen de websitebezoeker en de website.

Alice vraagt de website “bob.be” op via HTTP (1). Maar, haar netwerk is geïnfiltreerd door Evil Nick, die het antwoord van de server (2) aanpast en er malware (virussen) in injecteert (3). Wanneer bob.be HTTPS ondersteunt (4), kan Alice de webpagina zo opvragen. De website wordt versleuteld (5) en hoewel Evil Nick nog steeds haar netwerkverkeer kan zien, kan hij het niet ontcijferen of aanpassen. De versleutelde versie is dan ook gelijk aan het origineel (6).

Bij de eerste groep aanvallen misleidt een cracker je browser zo dat die niet naar het juiste adres gaat, maar naar een adres dat onder zijn controle staat.[1] Webpagina’s worden opgevraagd door een client (meestal een browser). Die zoekt het adres (IP-adres) van de website op in het Domain Name System (DNS)[2], en maakt dan verbinding met de server op dat adres. Door je browser te misleiden kan de cracker bijvoorbeeld je kredietkaartgegevens opslaan. Een andere groep zijn aanvallen waarbij de verbinding tussen browser en server wordt gelezen en aangepast. Bij gewone HTTP-verbindingen is alle uitgewisselde data “plain text” en dus leesbaar en aanpasbaar voor iedereen tussenin. Een kwaadwillige hacker kan daarvan gebruik maken om de inhoud van je webpagina te onderscheppen, een reclameboodschap toe te voegen en terug door te sturen.[3]

Secure Sockets Layer

Om dit te voorkomen voegt HTTPS een beveiligingslaag toe aan de communicatie, met name Secure Sockets Layer (SSL)[4]. SSL zorgt voor de beveiliging van het bovenliggende HTTP op twee manieren: het verifieert of de server waarmee hij verbonden is bij de domeinnaam hoort die de browser heeft aangevraagd en het versleutelt de verbinding tussen de browser en de server.

SSL gebruikt een combinatie van “public key cryptography” en symmetrische encryptie om de communicatie te beveiligen. In de praktijk heb je voor het gebruik van SSL twee sleutels (dat zijn twee unieke reeksen bits) nodig. De twee sleutels moeten aangemaakt worden door de beheerder van de website. De eerste sleutels is de private sleutel. Die is geheim en wordt door de server gebruikt om data te ontcijferen. De andere sleutel is publiek en wordt voor twee dingen gebruikt: de browser versleutelt hiermee de data die naar de server wordt gestuurd en de browser controleert met behulp van de publieke sleutel of de server is wie hij beweert te zijn.

Verificatie

Om dat laatste te verifiëren moet de publieke sleutel gecontroleerd worden door een certificaatautoriteit (CA). Dit is een organisatie wiens enige taak het verifiëren van de eigenaar van de sleutelparen is (is de beheerder van de sleutel ook de beheerder van de website?). Als website en sleutel bij elkaar horen, dan plaatst de autoriteit een elektronische handtekening en krijg je als beheerder een certificaat. De browser heeft een lijst met autoriteiten die hij vertrouwd. Als de handtekening van een autoriteit is die op die lijst voorkomt, vertrouwt de browser de website. Let op: niet alle autoriteiten worden door alle browsers als betrouwbaar gezien.[5]

Hoe HTTPS implementeren?

HTTPS is een technologie waarmee je niet je eigen systeem (server) beveiligt, maar wel dat van de bezoeker. Het is niet gratis, maar de nood aan veilige communicatie is voldoende hoog om de investering te rechtvaardigen.[6] Om je website te voorzien van HTTPS moet je ofwel naar je hoster (als je de site niet op je eigen server host), ofwel naar een CA (zoals Gandi, Globalsign en Digicert) om je publieke sleutel te laten ondertekenen. Op het internet circuleren veel “how to guides”[7] en er is dus geen enkele reden meer om het niet te doen.

Voetnoten

  1. Dit is een vorm van een “man-in-the-middle-attack”.
  2. DNS maakt de omschakeling tussen domeinnamen (bv. google.be), leesbaar voor mensen, en IP-adressen (bv. 216.58.212.163). Computers hebben een IP-adres nodig om een verbinding te kunnen maken.
  3. Onder meer om advertenties te injecteren: http://arstechnica.com/tech-policy/2013/04/how-a-banner-ad-for-hs-ok/.
  4. In het IP/OSI-lagenmodel zit SSL tussen de applicatielaag (HTTP) en de transportlaag (TCP). SSL is nu vervangen door Transport Layer Security (TLS), maar het principe is hetzelfde en omschakelen tussen beide gebeurt automatisch door de browser en server.
  5. Je kan ook zelf als autoriteit optreden (“self-signed certificate”), maar dan zullen browsers een waarschuwing weergeven dat “de verbinding niet vertrouwd is”. Ze is nog wel versleuteld, maar de browser vertrouwt de handtekening van de autoriteit niet.
  6. https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https
  7. Bijvoorbeeld  https://www.digitalocean.com/community/tutorials/how-to-install-an-ssl-certificate-from-a-commercial-certificate-authority