SSL sertifikatai ir svetainių adresai su priešdėliu https:// jau tapo savaime suprantamu saugumo komponentu visose verslo sistemose, kur perduodama konfidenciali informacija (el. pašto adresai, slaptažodžiai ir t.t.). Pavyzdžiui, net eidami į http://www.google.lt būsite nukreipti į https://www.google.lt.
Praeitą mėnesį rašiau, kad dėl naujos Google politikos SSL sertifikatai taps būtini praktiškai visoms rimtoms svetainėms, kurios nori būti randamos Google (plačiau: Nauja Google politika: SSL sertifikatai būtini SEO optimizacijai).
Svetainių lankytojams kyla klausimas: ką realiai apsaugo prie svetainės adreso rodoma spyna? Svetainių savininkams – kokią dar naudą be duomenų šifravimo teikia SSL sertifikatai, kad Google taip stipriai spaudžia juos diegtis?
Sužinokite, kaip veikia SSL sertifikatai ir HTTPS apsauga. Supraskite, kada iš tiesų esate saugūs, o kada rizikuojate tapti sukčių auka net https:// svetainėje.
Kaip veikia SSL sertifikatai?
SSL sertifikatai naudojami saugiam duomenų perdavimui tarp serverio ir naršyklės. SSL sertifikatai:
- Patvirtina duomenų šaltinį;
- Užšifruoja duomenis persiuntimui viešais interneto tinklais;
- Garantuoja jų originalumą gavėjui.
Pats SSL sertifikatas yra tik failas su kriptografiniu raktu. Panašūs kriptografiniai raktai naudojami labai plačiai, kur tik reikia patvirtinti tapatybę ar šifruoti duomenis. Pavyzdžiui, Lietuvoje Nacionalinis sertifikavimo centras išduoda panašius sertifikatus el. parašui asmens tapatybės kortelėje, o Registrų centras – m. parašui SIM kortelėje. Panašiais sertifikatais programuotojai patvirtina programinės įrangos autentiškumą, tinklo administratoriai – prie įmonės VPN tinklo besijungiančių darbuotojų tapatybę ir t.t.
Kaip praktiškai naudojami šie kriptografiniai raktai, priklauso nuo patikrinimą atliekančios programos ir jos naudojamų technologijų. SSL sertifikatus naudoja TLS (Transport Layer Security) standartu veikiančios programos.
TLS gali šifruoti visų protokolų paketus (interneto svetainės, el. paštas ir t.t.). Tad ir SSL sertifikatai tinka ne tik naršyklėms ir interneto svetainėms, bet ir el. pašto bei kitoms su serveriu bendraujančioms programoms.
Interneto svetainių atveju užšifruoti HTTP protokolo duomenys perduodami HTTPS protokolu. Vaizdžiai tai parodė Google savo I/O prezentacijoje:
Jei į interneto svetainę atėjote adresu, kuris prasideda https://, vadinasi, naudojatės TLS apsaugos standartu su įdiegtu SSL sertifikatu. Jei adreso laukelyje https:// dalis yra neperbraukta ir šalia matote spynos ikoną, galite būti tikri, kad interneto puslapis praėjo visus 3 patikrinimo etapus ir naršote saugiai.
1. Duomenų šaltinio autentifikavimas
Kai lankytojas ateina į svetainę HTTPS adresu, serveris jam atsiunčia viešą SSL sertifikato dalį. Pagal šį sertifikatą naršyklė patikrina, ar SSL sertifikatą tikrai išdavė patikima sertifikavimo institucija, kuri nurodyta prie rakto.
1.1. Patvirtinamas domeno savininkas
Jei sertifikatas nebegalioja, naudojamas ne jo savininko, išduotas nepatikimos institucijos arba neteisingai instaliuotas, lankytojas naršyklėje mato įspėjimą, kad svetainė neautentifikuota ir jos siunčiami duomenys nepatikimi. Naršant po tokią svetainę, naršyklė rodo perbrauktą https puslapio adrese, nerodo spynos ikonos arba kitaip įspėja apie tai, kad SSL sertifikatas veikia nesaugiai ir tikriausiai apsaugos nesuteikia.
Šis įspėjimas gali reikšti, tiek kad svetainės savininkas pamiršo atsinaujinti SSL sertifikatą, tiek kad iš tikrųjų prisijungėte prie kenkėjiško serverio. Pavyzdžiui, jei sukčiai įsilaužė į jūsų interneto teikėjo serverius ir nustatė, kad www.seb.lt vestų į jų falsifikuotą serverį, kuriame įdiegtas toks suklastotas sertifikatas, nepaisydami naršyklės įspėjimo ir perduodami duomenis tokiam serveriui rizikuojate patirti nuostolių.
Jei autentifikavimas įvyksta sėkmingai ir naršyklėje matote užrakintos spynos ikoną, naršyklė garantuoja, kad duomenis gaunate iš tikrojo domeno savininko. Jį patvirtina patikima sertifikavimo institucija. Tuomet galite būti tikri, kad esate prisijungę prie autentiško serverio.
Kartais sertifikavimo institucijos padaro klaidą ir sertifikatą išduoda sukčiams, o ne tikrajam domeno savininkui. Tuomet naršyklėje rodoma spyna tampa apgaulinga, nes autentišku pripažįstamas falsifikuotas serveris. Apie tai jau rašiau kitame straipsnyje: SSL sertifikatų draudimas – finansinės apsaugos iliuzija.
1.2. Extended Validation – patvirtinama įmonė
EV SSL sertifikatai naršyklėje šalia adreso dar rodo ir įmonės pavadinimą. Jie ne tik patvirtina, kad duomenis gaunate iš tikrojo domeno savininko, bet dar ir nurodo, kas tas domeno savininkas yra. Tai daug stipresnis indikatorius, kad bendraujate tikrai su norimo autoriaus svetaine.
Tačiau tai reiškia tik tiek, kad tokia įmonė tikrai įregistruota ir kad interneto svetainė priklauso jai. Ar ta įmonė tvarkingai moka mokesčius, neapgaudinėja klientų ir t.t. – ne SSL sertifikato reikalas. Pirkdami iš nežinomos el. parduotuvės pasidomėkite, kaip iš tiesų ši įmonė dirba ir kokie atsiliepimai apie ją.
Dar viena sėkla paranojai: žalioje juostoje matoma UAB „Pigu“ yra nebūtinai ta UAB „Pigu“, kurią įsivaizduojate. Mažesnės įmonės (Lietuvos atveju praktiškai visos įmonės) nėra užsipatentavusios savo vardo pasauliniu mastu. Tai reiškia, kad ne ES jurisdikcijose jų pavadinimai nėra saugomi. Vadinasi, ten galima įregistruoti identiškai pavadintą įmonę ir išsiimti SSL sertifikatą jos vardu.
Prieš pasitikėdami įmonės pavadinimu žalioje juostoje, paspauskite ant jo ir patikrinkite, kokioje šalyje ta įmonė registruota. Seišelių Respublikoje registruota UAB „Pigu“ kelia įtarimą.
Naujos naršyklių versijos šalį rodo ir pačioje žalioje juostoje, laužtiniuose skliaustuose iš karto po įmonės pavadinimo. Jose pastebėti įtartiną šalį daug lengviau.
1.3. Ar tikrai atėjote ten, kur norėjote?
Būtina suprasti, ką reiškia autentiškumo garantija. Ji neapsaugo nuo sukčių, naudojančių panašius į originalą domenus ir panašius įmonių pavadinimus. Pavyzdžiui, jei naršote po https://www.sweedbank.lt ir matote spyną, tai reiškia tik tiek, kad duomenis gaunate iš tikrojo sweedbank.lt savininko. Jei galvojote, kad naršote po swedbank.lt, tai jau jūsų bėdos.
SSL sertifikatas tikrina tik konkretaus domeno autentiškumą, o ne ar tikrai įvedėte tą domeną, kurį norėjote. Jei yra bent vieno simbolio skirtumas, sertifikavimo institucijos SSL sertifikatą išduoda kaip visiškai atskirą, su visomis garantijomis ir t.t. tuo vienu simboliu kitokiam domenui.
Domenų supainiojimas .LT domenų zonoje galimas tik per žioplumą. Tačiau tarptautinėse zonose, pvz.: .COM, viskas daug sudėtingiau. Tarptautinės domenų zonos domeno varde leidžia naudoti raides iš bet kokio raidyno. Vos atsirado galimybė registruoti tokius IDN domenus nelotyniškais simboliais, tai iš karto sukėlė spoofing tipo atakas prieš PayPal ir Facebook (plačiau Vikipedijoje).
Pavyzdžiui, kirilicos „у“ ir lotyniška „y“ daugumoje šriftų vizualiai atrodo identiškai. Bet kompiuteriams tai yra skirtingi simboliai, todėl kirilicos domenas „уе.com“ ir lotyniškas „ye.com“ veda į skirtingas interneto svetaines.
Chrome naršyklė ne lotyniškų simbolių domenus teisingai rodo tik tuomet, kai tie simboliai vartojami naršyklės nustatymuose įvestose jūsų vartojamose kalbose ir visi domene vartojami simboliai priklauso tai pačiai kalbai. Jei į naršyklę nesate įsivedę rusų kalbos, adreso lauke уе.com tampa xn--e1a1a.com. Tokiu atveju nelotyniškų simbolių domeną pastebėsite iš karto.
Jei visgi esate įsivedę rusų kalbą, adreso laukelyje nepastebėsite jokio skirtumo tarp šių domenų. Internet Explorer šalia mygtuko Perkrauti rodo specialią hieroglifo ikoną, kad atkreiptų dėmesį. Chrome jokių ikonų neprideda, tik nurodo tokio domeno lotynišką kodą paspaudus ant puslapio arba spynos ikonos šalia adreso. Firefox iš viso nerodo nei jokių ikonų, nei lotyniško domeno kodo. Tad naršyklės kol kas ne visada padeda atpažinti IDN domenus.
Naudodami antivirusinę programą arba naršyklę, kurios tikrina interneto svetainės patikimumą, sukčių tikriausiai išvengsite. Įėję į apgaulingą svetainę naršyklėje matysite pranešimą, kad svetainė nepatikima ir jau susilaukė skundų. Tačiau pirmieji, kurie tuos skundus parašo, tokiais atvejais dažnai visgi nukenčia. Tad nepatariu pasikliauti vien naršyklėmis ir tikėtis, kad jos visada užuos klastą.
Vesdami lotynišką interneto adresą tikriausiai neįterpsite vienos raidės iš kirilicos. Tačiau spausdami ant nepatikimų nuorodų el. laiškuose, forumuose ir t.t. galite ir apsigauti. Paprasčiausias būdas apsisaugoti – niekur nespauskite ant nuorodų į Gmail, Facebook, PayPal ir kt.
Norėdami prisijungti prie sistemų, kuriose laikote konfidencialius duomenis, jų adresą visuomet rašykite patys. Taip pat prisidėkite jas į adresyną – įėjus į išsisaugotą svetainę, prie jos adreso esanti žvaigždutė taps geltona.
2. Duomenų šifravimas
Svarbiausias SSL sertifikato komponentas yra kriptografiniai raktai. Po sėkmingo serverio savininko autentifikavimo naršyklė ir serveris per keliasdešimt milisekundžių įvykdo ganėtinai sudėtingą raktų apsikeitimo procedūrą.
2.1. SSL sertifikato raktų pora
Kartu su SSL sertifikatu naršyklė gauna ir viešą užšifravimo raktą (žalią). Tai dažniausiai būna 2048 bitų asimetriškas raktas. Asimetriškas jis todėl, kad gali duomenis užšifruoti, bet negali jų iššifruoti. Tą patį žaliąjį raktą serveris dalina visiems, kas tik jo paprašo.
Duomenis iššifruoti gali tik privatus iššifravimo (raudonas) raktas. Jį serveris laiko slaptai ir niekam neduoda. Vadinasi, kol niekas neįsilaužia į serverį ir nepavagia raudono rakto, bet kas gali viešu žaliu raktu patikimai užšifruoti duomenis ir konfidencialiai juos perduoti serveriui. Užšifruotus duomenis išsišifruoti gali tik serveris savo raudonu raktu – net duomenų siuntėjas nebegali išsišifruoti duomenų, kai juos užšifruoja.
Identiškas duomenų šifravimo metodas naudojamas el. laiškų šifravimui su PGP raktais. Kiekvienas gali susikurti tokią raktų porą. Viešą (žalią) raktą galite viešai paskelbti savo svetainėje, kad bet kas galėtu juo užšifruoti ir jums konfidencialiai atsiųsti el. laišką. Jį išsišifruosite savo privačiu (raudonu) raktu.
Toks šifravimo metodas leidžia konfidencialiai perduoti duomenis tik viena kryptimi. Bet TLS šifruoja tiek į serverį siunčiamus, tiek iš serverio gaunamus duomenis. Jei serveris naršyklei atsiųstų žaliu raktu užšifruotus duomenis, naršyklė jų negalėtų iššifruoti, nes neturi raudonojo rakto. Todėl interneto svetainių duomenims perduoti toks metodas netinka.
2.2. Sesijos duomenų šifravimo raktas
Žaliasis SSL sertifikato raktas naudojamas tik vieną kartą sesijos pradžioje. Gavusi žalią raktą, naršyklė sugeneruoja laikiną 256 bitų simetrišką sesijos raktą (mėlyną). Toks raktas gali duomenis ir užšifruoti, ir iššifruoti.
Tuomet naršyklė užšifruoja mėlyną raktą su iš serverio gautu žaliu raktu ir išsiunčia užšifruotą duomenų paketą serverį. Serveris gautą duomenų paketą išsišifruoja savo raudonu raktu ir taip sužino mėlynąjį raktą. Dabar tiek naršyklė, tiek serveris žino tą patį simetrišką mėlyną raktą, kuriuo duomenis galima ir užšifruoti, ir iššifruoti.
Toliau visi duomenys, siunčiami tarp serverio TLS programos ir naršyklės, yra šifruojami mėlynu simetrišku sesijos raktu. Jo niekas kitas neturi, tad duomenys yra perduodami visiškai konfidencialiai, be rizikos, kad pakeliui juos kas nors nuskaitys.
2.3. Interneto puslapių adresų šifravimas
Puslapio adresas, einantis po domeno, pvz.: https://pakamore.lt/kas-yra-ssl-sertifikatai-kaip-veikia-https/, taip pat yra šifruojamas. Tad konfidencialu tampa ir tai, kokiuose puslapiuose naršote. Kartais vien iš puslapio adreso galima sužinoti jūsų gyvenamąjį adresą, apatinių dydį ir pan., tad yra prasmės jį slėpti.
Tačiau domenas, pvz.: pakamore.lt, tinklo operatoriams yra vis tiek matomas. Tad nors naudojantis https:// adresu įmonės tinklo administratorius ir nežinos, ką veikiate Facebook, jis matys, kad naršote būtent po https://facebook.com.
Norint paslėpti domeną, reikia nusistatyti, kad naršyklė nevykdytų DNS užklausų tinkle ir nesiųstų SNI informacijos. DNS užklausas konkrečiam domenui galite atjungti nusistatę jam statinį IP adresą savo operacinės sistemos konfigūracijoje. Jei naršoma svetainė veikia ant atskiro IP adreso, galima pabandyti išsijungti ir SNI informacijos siuntimą naršyklėje.
Tačiau naršomos svetainės IP adresas visuomet liks viešas. Kadangi ant to IP adreso laikoma tik viena svetainė, naudodamasis reversiniu IP patikrinimu tinklo administratorius arba įsilaužėlis bet kada galės nustatyti, po kokią svetainę naršote. Tad svetainės domeno slėpimas tampa beprasmis.
Apibendrinant, naršyklėje matydami spynos ikoną galite būti tikri, kad duomenys interneto tinklais perduodami konfidencialiai. Tačiau tinklo operatoriai vis tiek mato, kokioje svetainėje naršote.
2.4. Realus duomenų saugumas
Grįžkim prie grėsmių. Ir šiame etape SSL sertifikato suteikiama garantija yra ribota. Jei kompiuteryje turite „įsidiegę“ virusą ar kokią nors kitą šnipinėjančią programą, ji išsiunčiamus duomenis mato dar prieš juos užšifruojant, o gautus – jau iššifruotus. SSL sertifikatai apsaugo nuo grėsmių tik interneto tinkle. Kaip duomenis apsaugote savo kompiuteryje – kitų programų ir technologijų reikalas.
Egzistuoja ir tokia rizika, kad kas nors kaupia visus tinkle perduodamus užšifruotus duomenis. Tuomet po keliolikos metų galbūt atsiras technologija, kaip atspėti šifravimo raktus ir tuos duomenis iššifruoti.
You can’t hide secrets from the future with math.
Senieji mažo bitų skaičiaus raktai jau yra nulaužti. Įsivaizduokime, kad kokia nors daug resursų turinti organizacija (pvz.: JAV Nacionalinė saugumo agentūra) sugebėjo išsisaugoti prieš dešimtmetį vykusios jūsų prisijungimo prie Mail.ru sesijos duomenis, kurie buvo užšifruoti raktu iš to laikmečio SSL sertifikato. Šiandien jie be didelių investicijų gali tuos duomenis išsišifruoti ir sužinoti, ką rašėte savo seneliui, įsikūrusiam Hindukušo kalnyne. Jei dėl kokių nors priežasčių tai JAV institucijai esate įdomus, ši situacija ne tokia jau ir hipotetinė.
Remdamasi JAV Standartizavimo ir technologijų instituto duomenimis, Vikipedija sako, kad dabar naudojamus 2048 bitų raktus pradėsime laužyti maždaug 2030 metais. Jei kam nors pavyktų sukonstruoti stabiliai veikiantį praktiškai panaudojamą kvantinį kompiuterį, dabartiniai SSL raktai taptų nesaugūs tą pačią dieną.
Todėl net naudojantis SSL sertifikatu geriau viešais tinklais neperduoti duomenų, kurie bus ypatingai konfidencialūs ir po dešimtmečio, pvz.: kur užmūrijote Tamplierių lobį ar lavoną. Visa kita (kreditinės kortelės, slaptažodžiai ir t.t.) jau bus pasikeitę, tad tos informacijos nutekėjimas jokio pavojaus nebekels.
Juk reguliariai, bent kartą metuose, keičiate visus savo slaptažodžius, tiesa? Jei ne, tai pasikeiskite juos bent jau tuomet, kai visi ims naudoti 4096 bitų raktus. Tai bus ženklas, kad dabar 2048 bitų raktu koduojami duomenys nebėra jau tokie ir saugūs.
3. Duomenų vientisumas
Duomenų vientisumas dažnai būna pats svarbiausias iš visų 3 etapų. Jis garantuoja, kad tiek naršyklės užšifruoti duomenys, tiek serverio užšifruoti duomenys gavėją pasieks absoliučiai tokie, kokius juos paruošė siuntėjas. Tai apsaugo nuo duomenų falsifikavimo.
Nenaudojant HTTPS, grėsmės pavyzdys priimant duomenis: į jūsų interneto paslaugų teikėjo maršrutizatorių įsilaužę programišiai jūsų parsisiunčiamo puslapio turinį gali pakoreguoti iš „bausti negalima, pasigailėti“ į „bausti, negalima pasigailėti“.
Jei nenaudojami SSL sertifikatai, bet koks viešais tinklais persiunčiamas turinys gali būti bet kaip koreguojamas ir cenzūruojamas.
Grėsmės pavyzdys išsiunčiant duomenis: atliekant pavedimą banke, „Petras“ gali būti pakeistas į „Jonas“, o 10€ į 100€. Žinoma, visi bankai jau naudoja SSL sertifikatus, tačiau kitose SSL sertifikatų neturinčiose sistemose tokio tipo „pakoregavimai“ pakeliui vis dar įmanomi.
Siųsdami į serverį svarbią komandą, kurią patvirtinate savo slaptažodžiu, įsitikinkite, kad naudojatės https:// adresu. Tuomet ta komanda serverį pasieks tikrai tokia, kokią ją sukūrėte.
Naudojant HTTPS protokolą, techniškai duomenų vientisumo patikrinimas įvyksta automatiškai, kai naudojami sesijos raktai. Užšifruotų duomenų paprasčiausiai neina pakoreguoti, nes pirmiausia reikia juos iššifruoti, o pakoreguotus vėl užšifruoti.
Jei sesijos metu bus nusiųsti neužšifruoti duomenys, nei naršyklė, nei serveris jų nepriims ir naršytojui bus rodoma klaida. Jei po kažkiek laiko programišiai sugebės atspėti sesijos raktą ir paruošti užšifruotų falsifikuotų duomenų paketą, pasibaigus sesijai tas raktas jau bus nebegaliojantis ir serveris tokių duomenų nepriims.
HTTPS ar ne HTTPS?
Apibendrinant, naršydami svetainę nesaugiu http:// adresu, rizikuojate, kad:
- Duomenis gaunate ne iš tikrojo domeno savininko;
- Savo asmeninius duomenis siunčiate ne tikrajam interneto svetainės savininkui;
- Tinklo administratoriai ir įsilaužėliai mato, kokius puslapius naršote ir kokius duomenis iš jų siunčiatės;
- Tinklo administratoriai ir įsilaužėliai mato, kokius savo asmeninius duomenis siunčiate į serverį;
- Programišiai pakeliui pakoregavo iš serverio gaunamus duomenis;
- Programišiai pakeliui pakoregavo jūsų komandą, siųstą į serverį.
Naršant tą pačią svetainę su priešdėliu https://, visos šios rizikos sumažėja iki minimumo. Visi patikrinimai atliekami automatiškai ir užtrunka vos keliasdešimt milisekundžių.
Tik vaikščiojantys https:// adresais gali būti saugūs.
Naudodamiesi SSL sertifikatais be jokio rūpesčio atsikratome visų didžiausių interneto tinklo grėsmių. Rūpesčiai tik serverių administratoriams, kurie turi juos įsidiegti. Kaip įsigyti tinkamą SSL sertifikatą ir nepermokėti rašiau straipsnyje „SSL sertifikatų skirtumai ir optimali kaina“.