Door Anoniem: En leg een leek eens uit wat zo'n sertificaat inhoud en wat de VS hiermee te maken heeft als je wilt.
Het voordeel van een https verbinding boven een http verbinding is:
(A) dat de hele verbinding tussen jouw PC en het IP-adres van de site waarmee jouw browser de verbinding heeft opgezet zodanig is versleuteld dat niemand mee kan kijken (of data on-the-fly kan wijzigen)
(B) dat je zeker weet dat je verbinding hebt met de site waarvan de URL in je browser te zien is
Als je niet zeker weet dat (B) klopt heb je eigenlijk niks aan (A), immers een site "onderweg" (man-in-the-middle) zou zich kunnen voordoen als de site waar je mee wilt communiceren, en dus alles meekijken, wijzigen, of in het geheel niet doorsturen naar de echte site. Om zowel (A) als (B) te laten kloppen zijn een aantal denkstappen nodig.
Public Key EncryptieOm te beginnen wordt er gebruik gemaakt van Public Key Encryptie. Simpel gezegd gaat het daarbij om een slot met twee "complementaire" sleutels: met een van beide sleutels kun je de boel op slot doen (gegevens versleutelen), maar niet ontgrendelen (gegevens weer toegankelijk maken); dat kan alleen met de andere sleutel!
Het is wat vereenvoudigd, maar de sleutel om gegevens mee te versleutelen noem je de public key en die geef je aan iedereen die hem wil hebben, de andere noem je de private key en die houdt de website strikt geheim. Als jij de public key van een website hebt, en alle gegevens die je daar naar toe stuurt daarmee versleutelt, kan alleen degene die de bijbehorende private key heeft die gegevens uitpakken; alleen die website dus.
Klinkt goed, maar hoe weet je zeker dat de public key die jij hebt echt van die website is die jij bedoelt, en niet van een website die zich voordoet als zodanig? Dus wel (A), maar nog geen (B)! Dat is waar certificaten voor worden gebruikt.
CertificatenIn de ICT wereld is een certificaat niets anders dan een bestand met een digitale handtekening eronder. Bij een SSL server certificaat (die bij https wordt gebruikt) zitten in dat certificaat onder andere de volgende gegevens: de ingangs- en einddatum, de hostname van de website en de public key daarvan. Tijdens het opzetten van de https verbinding stuurt de website haar certificaat naar jouw browser, zodat jij over de public key beschikt - en meteen kan checken of het certificaat nog geldig is en of de hostname hetzelfde is als in de URL-balk van je webbrowser. De digitale handtekening onder dat certificaat wordt gebruikt om vast te stellen dat de inhoud van het certificaat, sinds ondertekening, niet is gewijzigd.
Certificate Authority (CA)Maar wie zet die handtekening eigenlijk? Normaal gesproken doet een zogenaamde Certificate Authority (kortweg CA) dat. Een CA is een soort internet notaris. Essentieel daarbij is dat die CA controleert dat degene die dat certificaat wil laten ondertekenen, echt de website in zijn bezit heeft waarvan de hostame in het certificaat genoemd staat. Effectief garandeert een CA dus middels het ondertekenen van een certificaat dat een bepaalde public key bij een bepaalde hostname hoort.
Digitale HandtekeningZo'n digitale handtekening maakt trouwens ook gebruik van Public Key Encryptie, d.w.z. dat de CA haar private key gebruikt voor het zetten van de digitale handtekening, waarvan de echtheid alleen kan worden vastgesteld met behulp van de bijbehorende public key. En effectief worden bij elke webbrowser alle public keys van alle gerenommeerde CA's meegeleverd (feitelijk worden ook die weer in certificaten (zogenaamde root certificaten, type self-signed) meegeleverd, maar dat boeit even niet omdat niemand die op echtheid kan controleren - je zult je webbrowser-leverancier erop moeten vertrouwen dat ie de juiste public keys van alle belangrijke en betrouwbare CA's meelevert).
"Onbekende" CAWat is er nu aan de hand met "www.jagcnet.army.mil"? Het certificaat daarvan is ondertekend door een CA wiens public key niet is meegeleverd met jouw browser (je hebt geen root-certificaat van DOD-13 in je webbrowser). Daardoor garandeert niemand jouw browser (en dus jou) dat de public key in het ontvangen certificaat van "de echte" www.jagcnet.army.mil is, en daarom slaat de webbrowser alarm. In Firefox kun je overigens wel een (eenmalige of permanente) exception aanmaken. Bij een permanente exception bewaart Firefox het certificaat en controleert elke keer bij ontvangst of deze nog steeds hetzelfde is; zo ja dan wordt niet opnieuw gewaarschuwd. Goed nadenken en zomogelijk de echtheid verifieren dus voordat je zo'n permanente uitzondering toestaat.
PS het bovenstaande is een vereenvoudigde weergave. Versleutelen van veel data met public key encryptie kost te veel performance. Daarom wordt aan het begin van een verbinding een normale, on-the-fly gegenereerde symmetrische sleutel uitgewisseld; alleen die
sleutel wordt met public key encryptie ingepakt, verzonden en uitgepakt, waarna de rest van de verbinding met die symmetrische sleutel wordt versleuteld. In een SSL certificaat zitten meer gegevens, waaronder de naam etc. van de CA (op die manier kunnen Ilja. _\\// en ik zien wie in dit gevalde CA is).
Snappie?