Problemer med HTTP og almindelig tekst
Internettet er en ikke-betroet kanal til kommunikation. Når du sender eller modtager oplysninger fra et gammelt HTTP-sted http: //www.eksempel.com i din browser kan mange ting ske midt i dine pakker.
- En dårlig skuespiller kan opfange kommunikationen, kopiere dataene for sig selv, før de sender dem igen på kanalen mod dig eller den server, du talte med. Uden parternes viden er oplysningerne kompromitteret. Vi er nødt til at sikre, at kommunikationen er privat.
- En dårlig skuespiller kan ændre oplysningerne, når de sendes over kanalen. Bob har muligvis sendt en besked "x" men Alice ville modtage “Y” fra Bob, fordi en dårlig skuespiller opfanger beskeden og ændrede den. Med andre ord, integritet af meddelelsen er kompromitteret.
- Endelig og vigtigst af alt er vi nødt til at sikre, at den person, vi taler med, faktisk er den, de siger, de er. Går tilbage til eksempel.com domæne. Hvordan kan vi sikre os, at den server, der svarede tilbage til os, faktisk er den retmæssige indehaver af www.eksempel.com? På ethvert tidspunkt i dit netværk kan du blive omdirigeret til en anden server. En DNS et eller andet sted er ansvarlig for at konvertere et domænenavn, såsom www.eksempel.com, til en IP-adresse på det offentlige internet. Men din browser har ingen måde at kontrollere, at den DNS-oversatte IP-adresse.
De to første problemer kan løses ved at kryptere beskeden, før den sendes over internettet til serveren. Det vil sige ved at skifte til HTTPS. Imidlertid er det sidste problem, problemet med identitet, hvor en certifikatmyndighed kommer i spil.
Initiering af krypterede HTTP-sessioner
Hovedproblemet med krypteret kommunikation over en usikker kanal er “Hvordan starter vi det?”
Det allerførste trin ville involvere de to parter, din browser og serveren, til at udveksle krypteringsnøglerne, der skal udveksles, over den usikre kanal. Hvis du ikke er bekendt med begrebet nøgler, skal du tænke på dem som en rigtig lang tilfældigt genereret adgangskode, som dine data bliver krypteret med, før de sendes over den usikre kanal.
Nå, hvis nøglerne sendes over en usikker kanal, kan alle lytte til det og kompromittere sikkerheden ved din HTTPS-session i fremtiden. Desuden, hvordan kan vi stole på, at nøglen sendes af en server, der hævder at være www.eksempel.com er faktisk den egentlige ejer af dette domænenavn? Vi kan have en krypteret kommunikation med en ondsindet part, der maskerer sig som et legitimt sted og ikke kender forskellen.
Så problemet med at sikre identitet er vigtigt, hvis vi ønsker at sikre sikker nøgleudveksling.
Certifikatmyndigheder
Du har måske hørt om LetsEncrypt, DigiCert, Comodo og et par andre tjenester, der tilbyder TLS-certifikater til dit domænenavn. Du kan vælge den, der passer til dit behov. Nu skal den person / organisation, der ejer domænet, på en eller anden måde bevise over for deres certifikatmyndighed, at de faktisk har kontrol over domænet. Dette kan gøres ved enten at oprette en DNS-post med en unik værdi, som anmodet af certifikatmyndigheden, eller du kan tilføje en fil til din webserver med indhold specificeret af certifikatmyndigheden, CA kan derefter læse denne fil og bekræft, at du er den gyldige ejer af domænet.
Derefter forhandler du et TLS-certifikat med CA, og det resulterer i en privat nøgle og et offentligt TLS-certifikat udstedt til dit domæne. Beskeder krypteret af din private nøgle kan derefter dekrypteres af det offentlige certifikat og omvendt. Dette er kendt som asymmetrisk kryptering
Klientbrowserne, som Firefox og Chrome (nogle gange endda operativsystemet) har kendskab til certifikatmyndigheder. Disse oplysninger bages i browseren / enheden lige fra starten (det vil sige når de er installeret), så de ved, at de kan stole på visse CA'er. Nu, når de prøver at oprette forbindelse til www.eksempel.com over HTTPS og se et certifikat udstedt af, siger DigiCert, kan browseren faktisk verificere at ved hjælp af de nøgler, der er gemt lokalt. Der er faktisk et par flere mellemliggende trin til det, men dette er et godt forenklet overblik over, hvad der sker.
Nu hvor certifikatet leveret af www.eksempel.com kan stole på, dette bruges til at forhandle om en unik symmetrisk krypteringsnøgle, der bruges mellem klienten og serveren i den resterende del af deres session. I symmetrisk kryptering bruges en nøgle til at kryptere såvel som dekryptering og er normalt meget hurtigere end dens asymmetriske modstykke.
Nuancer
Hvis ideen om TLS og internetsikkerhed appellerer til dig, kan du se nærmere på dette emne ved at grave i LetsEncrypt og deres gratis TLS CA. Der er meget mere detaljeret i hele denne rigmarole end angivet ovenfor.
Andre ressourcer, som jeg kan anbefale til at lære mere om TLS, er Troy Hunts blog og arbejde udført af EFF som HTTPS Everywhere og Certbot. Alle ressourcerne er gratis at få adgang til og virkelig billige at implementere (du skal bare betale for registrering af domænenavn og VPS timegebyrer) og få en praktisk oplevelse.