Door Anoniem: HSTS... ik wil graag wat nieuwe skills leren [...]
Webservers kunnen via het http protocol "metadata" naar de bezoekende browser sturen in zogenaamde "headers". Deze headers maken geen onderdeel uit van de webpagina zelf en zijn onzichtbaar voor gebruikers (ook als je "view source" doet - maar met F12 kun je ze wel bekijken).
Zo'n header is een tekstregel met een "name-value" paar. Die naam is een gestandaardiseerde "identifier" zoals hier beschreven:
https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Standard_response_fields. Omdat https grotendeels gelijk is aan http over TLS, wordt ook bij https gebruik gemaakt van headers.
Eén van die mogelijke headers is de HSTS (Http Strict Transport Security) header, gestandaardiseerd in
https://tools.ietf.org/html/rfc6797.
Een voorbeeld van zo'n header regel is:
Strict-Transport-Security: max-age=3600
Bij ontvangst van zo'n header via een https verbinding (browsers negeren HSTS headers indien ontvangen via http), bijvoorbeeld van een URL die begint met
https://www.security.nl/, zal elke moderne webbrowser, gedurende 3600 seconden na ontvangst van die header, het volgende doen:
1) Elke URL die begint met
http://www.security.nl/, automatisch en ongevraagd wijzigen in
httpS://www.security.nl/ nadat je op zo'n link hebt geklikt (of bij een in een pagina ingebouwde verwijzing, bijvoorbeeld naar een plaatje in die pagina), doch
voordat de netwerkverbinding daarvoor wordt opgezet;
2) Elke certificaatwaarschuwing (met een "ga
toch naar de site" knop) omzetten in een definitieve certificaatfoutmelding die ervoor zorgt dat de gebruiker geheel niet naar de site kan.
Een korte tijd (zoals 3600 seconden = 1 uur in bovenstaand voorbeeld) zorgt er in elk geval (tijdens de huidige sessie) voor dat als je op een eventuele
http link naar een pagina op deze site zou klikken, zoals de volgende link naar de pagina die je nu leest:
http://www.security.nl/posting/576552/, die URL automatisch door jouw browser wordt veranderd in:
https://www.security.nl/posting/576552/ - net voordat jouw browser de netwerkverbinding daarvoor opent.
Toen security.nl overschakelde van http naar https hoefden de beheerders dus niet alle http links naar deze site in alle oude pagina's te wijzigen om ervoor te zorgen dat browsers zoveel mogelijk via https met deze site communiceren.
Gebruikelijk en verstandig is een veel langere tijd dan 3600 seconden, bijv. 1 jaar (3600 seconden X 24 uur x 365 dagen = 31536000 seconden). Er is nog iets dat je moet weten: webbrowsers
onthouden dit meestal (afhankelijk van instellingen) ook na het stoppen en starten van de webbrowser (ook na herstarten van je PC, tablet of smartphone).
Dus als jij na vandaag, doch binnen 365 dagen,
www.security.nl of expliciet
http://www.security.nl/ in de URL-balk van jouw browser tikt (of als je nog een oude snelkoppeling naar
http://www.security.nl/ hebt en daar op klikt), zal jouw browser daar -normaal gesproken-
https://www.security.nl/ van maken, onzichtbaar voor jou, net voor het opzetten van de verbinding.
Een MITM (Man In The Middle) aanvaller kan jouw verbinding alleen kapen als:
- Ofwel zij over een geldig certificaat
met bijpassende private key van www.security.nl beschikt;
- Ofwel jouw browser niet (meer) over HSTS informatie voor www.security.nl beschikt.
Dat tweede punt kan onder de volgende onstandigheden:
- Het is de allereerste keer dat je www.security.nl bezoekt (het kip/ei probleem van HSTS);
- Idem met
de specifieke browser die je nu gebruikt (herinstallatie, nieuwe smartphone etc.);
- Als jouw browser geen HSTS ondersteunt of de browser zo geconfigureerd is dat
niets van de "history" wordt onthouden bij afsluiten, inclusief HSTS informatie.
Is het wat duidelijker zo?