Ga naar hoofdinhoud

HTTPS & TLS

Klik in je adresbalk op het slotje en je ziet "Verbinding is beveiligd". Bezoek een site zonder slotje en je browser zet er Niet veilig naast, in het rood. Deze pagina legt uit wat er precies achter dat verschil zit.

HTTPS is geen apart protocol. Het is gewoon HTTP, verpakt in TLS (Transport Layer Security, de opvolger van SSL). De requests en responses blijven exact dezelfde; ze worden alleen versleuteld verstuurd, over poort 443 in plaats van 80.

Waarom een browser waarschuwt bij HTTP​

Een HTTP-request is leesbare tekst die ongewijzigd over tientallen routers reist:

POST /login HTTP/1.1
Host: voorbeeld.be
Content-Type: application/x-www-form-urlencoded

gebruiker=jan&wachtwoord=Zomer2026!

Iedereen die dat verkeer onderweg kan opvangen, leest dit mee: de beheerder van de publieke wifi in het station, iemand anders op datzelfde netwerk, elke tussenliggende provider. In Wireshark heb je er geen enkele truc voor nodig, het staat er gewoon.

Het gaat bovendien verder dan meelezen. Zonder TLS heb je drie problemen:

ProbleemWat er kan gebeuren
Geen vertrouwelijkheidWachtwoorden, cookies en formuliergegevens zijn leesbaar onderweg
Geen integriteitEen tussenpersoon kan de pagina aanpassen: advertenties injecteren, een download vervangen
Geen authenticiteitJe hebt geen enkel bewijs dat je met de échte server praat en niet met een namaakserver

TLS lost die drie tegelijk op. Dát is wat de browser bedoelt met "beveiligd", en waarom hij de afwezigheid ervan als een waarschuwing toont, ook op een gewone informatieve pagina: je weet anders niet of wat je ziet echt van die site komt.

Wat de waarschuwing niet zegt

"Niet veilig" betekent niet dat de site kwaadaardig is. Het betekent dat de verbinding niet beveiligd is. Omgekeerd geldt hetzelfde: een slotje bewijst dat je versleuteld praat met de server die bij die domeinnaam hoort, niet dat de eigenaar te vertrouwen is. Ook een phishingsite kan een geldig certificaat hebben.

De TLS-handdruk​

Voor het eerste HTTP-request vertrekt, onderhandelen client en server. Klik door de stappen.

https://www.ap.be · de handdruk voor poort 443
Client

Stap 1. ClientHello

De browser stelt zich voor en zegt wat hij aankan.

De browser opent het gesprek met een lijst van de TLS-versies en de versleutelingsmethodes die hij ondersteunt, een willekeurig getal, en de naam van de server die hij wil bereiken. Die naam is nodig omdat één IP-adres honderden sites kan bedienen: de server moet weten welk certificaat hij bovenhaalt.

TLS 1.3 · ciphers: ...  · servernaam (SNI): www.ap.be
1 / 6

Die hele uitwisseling gebeurt na de TCP-handdruk en voor het HTTP-request. In DevTools zie je ze terug als de fase SSL in het tabblad Timing.

Certificaten en wie ze uitgeeft​

Versleutelen is het makkelijke deel. De moeilijke vraag is: met wie ben je versleuteld aan het praten? Daarvoor dienen certificaten.

Een certificaat is een ondertekend document dat zegt: "de sleutel hieronder hoort bij www.ap.be". Wie tekent, is een certificaatautoriteit (CA). Je browser en besturingssysteem dragen een lijst van CA's die ze vertrouwen; die lijst is de basis van het hele systeem.

Root-CA (in je besturingssysteem)
└── Intermediate-CA (van de uitgever)
└── Certificaat van www.ap.be

Bij elke verbinding controleert je browser drie dingen:

ControleFaalt ze, dan
Staat de domeinnaam in het certificaat?NET::ERR_CERT_COMMON_NAME_INVALID
Is het nog geldig?NET::ERR_CERT_DATE_INVALID
Loopt de keten tot een vertrouwde root?NET::ERR_CERT_AUTHORITY_INVALID

Veelvoorkomende oorzaken:

MeldingWat er meestal aan de hand is
Verlopen certificaatDe automatische vernieuwing is stilgevallen
Verkeerde naamCertificaat voor voorbeeld.be, maar je surft naar www.voorbeeld.be
Onbekende uitgeverEen self-signed certificaat: iemand tekende zijn eigen bewijs
Onvolledige ketenHet tussenliggende certificaat ontbreekt op de server
Bekijk zelf een certificaat

Klik op het slotje in je adresbalk en ga naar de certificaatgegevens. Kijk naar drie dingen: voor welke namen het geldig is, tot wanneer, en wie het uitgaf. Vergelijk daarna een grote site met deze cursussite.

Let's Encrypt: certificaten zijn gratis geworden​

Vroeger kostte een certificaat geld en moest je het jaarlijks handmatig vernieuwen. Dat is de belangrijkste reden waarom het web zo lang op HTTP bleef hangen.

Let's Encrypt is een CA zonder winstoogmerk die certificaten gratis en volledig automatisch uitgeeft. Dat werkt zo:

  1. Je vraagt een certificaat aan voor voorbeeld.be.
  2. Let's Encrypt geeft je een uitdaging: bewijs dat het domein van jou is. Dat kan door een bestand op je webserver te plaatsen (HTTP-01) of door een TXT-record in je DNS te zetten (DNS-01, zie DNS).
  3. Hun servers controleren die uitdaging.
  4. Je krijgt een certificaat dat 90 dagen geldig is.

Die korte geldigheidsduur is opzet: ze dwingt automatisering af. Met certbot is de hele opzet één commando, inclusief het vernieuwen:

sudo certbot --nginx -d voorbeeld.be -d www.voorbeeld.be

Certbot vraagt het certificaat aan, past je nginx-configuratie aan, zet een omleiding van poort 80 naar 443, en installeert een taak die twee keer per dag nakijkt of vernieuwen nodig is. Host je bij Netlify, Vercel of GitHub Pages, dan gebeurt dit onzichtbaar voor jou.

Wat je in de praktijk nog tegenkomt​

OnderwerpWat het betekent
Omleiding 80 → 443Elke goede server beantwoordt HTTP met een 301 naar de HTTPS-versie
HSTSEen header die de browser laat onthouden dat deze site enkel via HTTPS bereikbaar mag zijn, ook bij een volgend bezoek
Mixed contentEen HTTPS-pagina die een afbeelding of script via HTTP laadt. De browser blokkeert dat of waarschuwt: één onbeveiligd script volstaat om de hele pagina te compromitteren
localhost als uitzonderingBrowsers behandelen http://localhost als veilige context. Je dev server heeft dus geen certificaat nodig
Self-signed op een testserverWerkt technisch, maar geeft altijd een waarschuwing. Prima om te testen, nooit in productie

Test jezelf​

1. Wat verandert HTTPS aan een HTTP-request?

2. Je logt in op een `http://`-site op de wifi van het station. Wat is het grootste risico?

3. Een bezoeker krijgt `NET::ERR_CERT_DATE_INVALID`. Wat is er aan de hand?

4. Wat kan iemand die je HTTPS-verkeer opvangt nog altijd zien?

Onthoud
  • HTTPS is HTTP in TLS, over poort 443. De berichten zelf veranderen niet.
  • TLS levert drie garanties: vertrouwelijkheid, integriteit en authenticiteit.
  • De handdruk loopt na TCP en voor het HTTP-request: hello, certificaat, controle, gedeelde sleutel, versleuteld kanaal.
  • Een certificaat koppelt een sleutel aan een domeinnaam en wordt ondertekend door een CA die je browser vertrouwt.
  • Let's Encrypt geeft gratis certificaten uit met een geldigheid van 90 dagen; met certbot verloopt vernieuwen automatisch.
  • Versleuteld is niet onzichtbaar: adressen, poort en de bezochte domeinnaam blijven zichtbaar.