Door Remco van der Kleijn: Een SSL certificaat moet bijvoorbeeld op de juiste manieren toegepast worden om de website veiliger te maken.
Niet de website maar de verbinding. Als toekomstige professional moet je niet bijdragen aan de verwarring die in de volksmond bestaat.
Door Remco van der Kleijn: Normaal gesproken gebeurt dit over het HTTP protocol. Dit is voor websites geen probleem zolang er geen gebruikers gegevens verzonden worden. De gegevens in het HTTP protocol kunnen namelijk door iedereen uitgelezen worden.
M.b.t. de laatste zin: de gegevens kunnen niet door
iedereen uitgelezen worden, een aanvaller zal daar moeite voor moeten doen.
In plaats van "Dit is voor websites geen probleem ..." bedoel je waarschijnlijk iets als "Dit vormt voor gebruikers geen beveiligingsrisico ...".
Echter, alleen lezen via http is ook niet zonder risico's. Een succesvolle MitM kan
alle informatie wijzigen die wordt uitgewisseld en zowel de gebruiker als de server op het verkeerde been zetten.
Voorbeeld: de gebruiker opent http://www.nu.nl/ en de aanvaller wijzigt een pagina in "Wachtwoorden internetbankieren ING gekraakt" met een link naar een neppagina waar wachtwoorden gewijzigd kunnen worden.
Door Remco van der Kleijn: iemand die naar “http://bedrijf.nl” navigeert automatisch doorgeschakeld naar “https://bedrijfx.nl” en forceer je dus het gebruik van een veilige verbinding.
Los van verwarring over bedrijf.nl en bedrijfx.nl is het onjuist dat je zo in alle gevallen forceert dat de browser via https met de server communiceert. Hoewel een MitM via https met de server zal communiceren, blijft de gebruiker http://... zien in de browser.
Een gedeeltelijke oplossing voor dit probleem is het toepassen van HSTS (zie
https://www.security.nl/posting/389177/Bank+https+aanval+op+TV#posting389187).
Wat ik geheel mis in jouw artikel is wijzen op het belang van authenticatie van de server. Een verstandige gebruiker zal niet zomaar op elke server zijn of haar gegevens willen invullen, en moet 2 dingen zeker weten:
1) De domain name (zoals bedrijf.nl) is daadwerkelijk van de bedoelde organisatie;
2) De browser heeft daadwerkelijk een verbinding met de bedoelde domain name (zoals bedrijf.nl).
Hierbij helpt SSL/TLS. Uitleggen hoe dat werkt voert wellicht te ver voor jouw artikel, maar omdat mijn ervaring is dat weinig mensen dit begrijpen, leg ik het hieronder uit.
Op de server staat een sleutelpaar bestaande uit een (geheime) private key en een bijbehorende (niet geheime) public key. Alles wat je met een public key versleutelt kan
uitsluitend met de bijbehorende private key worden ontsleuteld. De server stuurt de public key naar de browser. De browser genereert een willekeurig getal, bijv. 13579, versleutelt dit met de public key en stuurt het resultaat naar de server. De server ontsleutelt dat met de private key en roept: het was 13579! Dit is een vereenvoudiging, het doel is echter hetzelfde: hierdoor weet de browser zeker dat de server beschikt over de private key behorende bij de public key die de server opstuurde.
Dat zegt nog niets - tenzij we weten van wie het sleutelpaar is. Daarom stoppen we de public key samen met een domain name in een certificaat en laten dat certificaat door een certificate authority digitaal ondertekenen. Belangrijk: als het goed is stelt de certificate authority daarbij vast of degene die het certificaat aanvraagt, gerechtigd is om dat te doen namens de organisatie met de gegeven domain name.
In plaats van de kale public key stuurt de server voortaan het certificaat naar de browser. De browser controleert of de domain name in het certificaat overeenkomt met de in de URL balk getoonde domain name, en of de server over de juiste private key beschikt. Als dat allemaal klopt (en de private key van de server niet door aanvallers gekopieerd is) communiceert de browser daadwerkelijk met de bedoelde server. Pas als je zeker weet met
wie je praat heeft het zin om de verbinding te versleutelen!