13.5 Certifikáty TLS
Zabezpečenie prístupu z WAN do LAN
V súvislosti s WAN sieťami potrebujeme riešiť aj prístup cez internet do vnútornej siete. Už vieme nastaviť firewall a umožniť prístup na zariadenia v LAN, pokiaľ majú verejné adresy (typicky globálne IPv6 adresy). A ak verejné adresy nemajú, vieme sprístupniť ich rôzne služby cez presmerovanie portov.
No keď povolíme akýkoľvek prístup z WAN do LAN, mali by sme riešiť aj otázku bezpečnosti z hľadiska možného odpočúvania komunikácie či podvrhnutia falošného cieľa. Určite nik nechce, aby mu pri vzdialenom prístupe na domáci server automatizácie niekto odchytil prihlasovacie údaje.
Riešením je šifrovanie. Môžeme nasadiť VPN (ktorým sa budeme venovať v 14. kapitole) pre šifrovanie akéhokoľvek vzdialeného prístupu do LAN, no pokiaľ nám stačí zabezpečiť webové služby, môžeme využiť aj jednoduchšie riešenie cez HTTPS reverzného proxy servera. Pri oboch spôsoboch sa v súvislosti so šifrovaním stretneme s TLS (Transport Layer Security) tunelom a certifikátmi. Preto sa musíme s nimi oboznámiť.
Certifikát TLS
Certifikát TLS je digitálny dokument pre zabezpečenie TLS, ktorý obsahuje verejný kľúč asymetrického šifrovania, identifikačné údaje jeho majiteľa (obvykle doménové meno) a iné metadáta. Je digitálne podpísaný vydavateľom (certifikačnou autoritou). Je definovaný štandardom X.509.
Koreňový certifikát
Certifikáty, ktoré nie sú podpísané inou nadradenou autoritou, ale sú „podpísané samy sebou“, nazývame koreňové certifikáty. Mávajú veľmi dlhú dobu platnosti (až desiatky rokov). Koreňové certifikáty dôveryhodných certifikačných autorít (CA) bývajú „zabudované“ v aplikáciách, ako je webový prehliadač (Firefox a všetky s jadrom Chromium), či poštový klient (Thunderbird) a rovnako sa nachádzajú aj priamo v operačnom systéme. Takéto certifikačné autority označujeme ako dôveryhodné koreňové CA.
Mám webový prehliadač Vivaldi, ktorý má tiež jadro Chromium, no v nastaveniach mi zobrazuje priamo certifikáty z OS. Naozaj má aj svoje vlastné úložisko?
Hoci tieto zabudované certifikáty niektoré Chromium prehliadače nezobrazujú vo svojich nastaveniach, je možné sa k nim dostať zadaním adresy chrome://certificate-manager.
Koreňové certifikáty, ktoré nie sú nainštalované v aplikácii / systéme, sú pokladané za nedôveryhodné (môže ich vytvoriť ktokoľvek), no pokiaľ máme istotu o ich pôvode, môžeme ich do zariadenia nainštalovať a tým ich vyhlásiť za dôveryhodné.
Čo keď má webový prehliadač svoje vlastné úložisko certifikátov a ja si nejaký certifikát pridám do OS. Bude ho akceptovať aj prehliadač?
Správanie v tejto situácii je možné nastaviť v prehliadači. V súčasnosti by mal každý prehliadač v predvolenom nastavení akceptovať aj certifikáty z OS, aby fungovali vnútropodnikové certifikáty nainštalované do OS, či certifikát antivírusu.
Obvyklá situácia je nasledovná: Náš certifikát nám pre konkrétne doménové meno vydal vydavateľ / sprostredkovateľ (napríklad Let's Encrypt R12), ktorý síce nie je koreňovou CA, ale jeho certifikát je podpísaný niektorou dôveryhodnou koreňovou CA (napríklad v tomto prípade ISRG Root X1) - takéto zreťazenie býva označované ako certifikačná cesta.
V skutočnosti nemá OS Windows predinštalované úplne všetky relevantné certifikačné autority, ale vie si ich dotiahnuť z cloudu automaticky, keď narazí na niektorú, ktorú zatiaľ nemá. Zároveň sa môžu v jeho katalógu niektoré CA objaviť po nainštalovaní bezpečnostnej aktualizácie OS.
Získanie TLS certifikátu
Proces bezpečného získania certifikátu má nasledovné kroky:
- Vygenerujeme si asymetrický šifrovací kľúč - jednu jeho časť si bezpečne uchováme v podobe súkromného kľúča (.key), druhú časť budeme pokladať za verejný kľúč, ktorý bude treba dať podpísať vo forme CSR (Certificate Signing Request).
- Súkromný kľúč nikomu nedávame, dokonca ani vydavateľovi certifikátu (nepotrebuje ho). Musíme ho ukladať v bezpečí a môžeme ho chrániť aj heslom (zadáva sa pri generovaní). Súkromný kľúč musí byť uložený na serveri, ktorý realizuje šifrovanie (napríklad na zariadení MikroTik, ktoré je SSTP serverom).
- Verejný kľúč v podobe CSR odošleme certifikačnej autorite, tá nám po overení oprávnenosti kľúč podpíše, čím získame finálny verejný certifikát (.crt).
- Verejný certifikát uložíme aj na server, aby ho mohli klienti získať a použiť pre šifrovanie na ich strane.
Ako certifikačná autorita overuje oprávnenosť našej požiadavky a prečo?
Dôvod je vcelku jednoduchý: CA nemôže podpisovať čokoľvek, pretože potom by si ktokoľvek mohol nechať podpísať certifikát napríklad pre banku a vytvoriť falošnú kópiu jej webu. Overovanie sa líši od úrovne certifikátu. Bežné certifikáty overujú len vlastníctvo doménového mena - označujú sa aj DV (detaily rozoberieme nižšie). Overovanie obvykle prebieha tak, že unikátny súbor od CA umiestnime na náš web (dostupný cez HTTP), systém CA skontroluje, či je naozaj dostupný na overovanej doméne a ak áno, berie to ako dôkaz, že obsah na danej doméne spravujeme.
Typy TLS certifikátov
V princípe sú všetky TLS certifikáty podobné, no môžu sa líšiť účelom, pre ktorý majú slúžiť - napríklad overovanie servera, podpisovanie kódu, digitálne podpisovanie, časová pečiatka a podobne. Ak však porovnávame certifikáty rovnakého účelu, v našom prípade certifikáty pre overovanie servera (webového alebo VPN), tak sa líšia ešte aj podľa úrovne overovania:
- DV (Domain Validation) - overené doménové meno: potvrdzujú len to, že držiteľ ovláda doménu, ktorú certifikát potvrdzuje;
- OV (Organization Validation) - overená organizácia: potvrdzujú identitu organizácie (banky, školy, úradu, firmy) spolu s miestom jej pôsobenia;
- EV (Extended Validation) - rozšírené overenie: najprísnejšie overovanie organizácie, pri ktorom sa kontroluje aj riadna úradná registrácia organizácie v mieste pôsobenia a splnenie bezpečnostných požiadaviek stanovených fórom certifikačných autorít.
Z hľadiska kryptografickej bezpečnosti nie je rozdiel medzi týmito úrovňami certifikátov, no certifikát vyššej úrovne môže u znalého používateľa pôsobiť dôveryhodnejšie.
Rozpozná „bežný používateľ“ úroveň certifikátu?
Žiaľ, nie. V prípade zabezpečenia VPN spojenia rozdiel nezbadá ani znalý používateľ, pri zabezpečenom webe je možné rozdiel vidieť, ale až po zobrazení detailov zabezpečenia. Bežný používateľ neuvidí žiadny rozdiel.
Prečo webové prehliadače nejako nerozlišujú jednotlivé úrovne certifikátov?
V minulosti (do roku 2019) to naozaj robili a URL adresy s EV certifikátom zvýrazňovali zeleným podfarbením, pričom pred URL uvádzali aj plné meno overenej organizácie. Preto sa EV certifikáty ľudovo nazývali aj „zelené certifikáty“. V súčasnosti od toho všetky prehliadače upustili, uvádzajú sa viaceré dôvody:
- Falošný pocit bezpečia: Zelený certifikát vyvolával v používateľoch istotu, že navštívili skutočný web organizácie a už si toľko nevšímali samotné doménové meno. V skutočnosti však mohol útočník legálne zriadiť a overiť organizáciu s rovnakým menom napríklad v inej krajine.
- Slepota používateľov: Pokiaľ útočník vytvoril falošný web, ktorý nemal zelený certifikát, niektorí používatelia aj tak bez zaváhania zadávali prihlasovacie údaje, či iné citlivé informácie.
- Miesto na obrazovke mobilov: S masívnym nástupom smartfónov sa musel šetriť zobrazovací priestor a nebolo miesto pre zobrazenie celého názvu organizácie a aj URL adresy.
- Rozšírenie HTTPS a zmena filozofie: Kým pôvodne mala HTTPS len malá časť webov, postupne sa to stalo samozrejmosťou a v dnešnej dobe sa červenou farbou a upozorneniami označujú tie weby, ktoré HTTPS nemajú.
Má teda zmysel riešiť vyššiu úroveň certifikátov?
Pre VPN určite nie a pre web je to vec názoru. Vyššia úroveň je záležitosť prestíže, ktorú však ocenia len technicky zdatní používatelia. Vo všeobecnosti sa dá konštatovať, že na bežné weby úplne postačujú DV certifikáty.
Generovanie CSR v MikroTik RouterOS
Generovanie asymetrického šifrovacieho kľúča v 1. bode je možné aj priamo v MikroTik RouterOS, cez WinBox ponuku System → Certificates, kde cez záložku Certificates dáme pridať nový certifikát a vyplníme tieto údaje:
- Name: môžeme pomenovať akokoľvek, rozumné je zadať doménové meno s dodatkom „template“;
- Common Name: zadáme požadované doménové meno (hlavné);
- Subject Alt. Name: opäť zadáme požadované doménové meno (prípadne aj ďalšie alternatívy);
- Days Valid: môžeme zadať počet dní platnosti podľa potreby;
- Key Usage: začiarkneme „digital signature“, „key encipherment“, „tls server“;
- následne potvrdíme cez Apply a stlačíme tlačidlo Create Cert. Request;
- v novom okne zvolíme požadovanú dĺžku kľúča (Key Size), môžeme zadať aj heslo k nemu (Key Passphrase) a po stlačení Start sa vygeneruje súkromný kľúč a CSR - oboje nájdeme medzi súbormi.
Prečo zadávame doménové meno až do troch koloniek?
Do Name ho zadávať nemusíme, ale robíme to pre prehľadnosť, pretože pri konfigurácii serverov práve toto meno certifikátu uvidíme v rozbaľovacom zozname certifikátov. Subject Alt. Name je to podstatné miesto pre zadanie doménového mena v súčasnosti. Do Common Name sa doménové meno zadávalo v minulosti a hoci teoreticky by to v dnešnej dobe už nemuselo byť potrebné, z historických dôvodov (a pre kompatibilitu so starším softvérom) je potrebné zadať doménové meno aj sem.
Ďalej je treba pokračovať bodmi 2 až 4, teda CSR súbor dať podpísať niektorej certifikačnej autorite.
Niektorí vydavatelia nám v záujme zjednodušenia umožňujú obísť 1. bod a poskytnú nám hotovú dvojicu verejného certifikátu (.crt) aj so súkromným kľúčom (.key). Treba myslieť na to, že v takejto situácii má vydavateľ aj náš súkromný kľúč a ak by si ho uchoval, mohol by dešifrovať našu komunikáciu (bez PFS) alebo pripraviť falošný server s pravým certifikátom.
Self-signed certifikát
Najjednoduchšou (a vždy bezplatnou) cestou k certifikátu je jeho „samovydanie“ (self-signing) - prostredníctvom príslušného softvéru si vygenerujeme súkromný kľúč (.key) i verejný certifikát (.crt), a to bez podpisu skutočnou CA. Teda si ho podpíšeme sebou samým.
Takýto certifikát je z hľadiska procesu šifrovania plnohodnotný, no musíme mať možnosť doručiť ho bezpečným spôsobom klientom. To je niekedy pomerne jednoducho dosiahnuteľné - napríklad inštalácia na vlastné zariadenia organizácie, no niekedy nereálne - pokiaľ prevádzkujeme verejnú službu a klientelu predstavuje verejnosť. Určite by to nebolo vhodné pre web - prehliadač by dôrazne upozornil na možný podvrh a návštevníkovi by bránil v prístupe.
Generovanie self-signed certifikátu v MikroTik RouterOS
Self-signed certifikát môžeme jednoducho vytvoriť aj priamo v MikroTik RouterOS - cez záložku Certificates dáme pridať nový certifikát a vyplníme nasledovné údaje:
- Name: môžeme pomenovať akokoľvek, rozumné je zadať doménové meno, prípadne aj s dodatkom „(self-signed)“;
- Common Name: zadáme požadované doménové meno (hlavné);
- Subject Alt. Name: zadáme požadované doménové meno (prípadne aj ďalšie alternatívy);
- Key Size: zvolíme požadovanú dĺžku RSA kľúča;
- Days Valid: môžeme zadať počet dní platnosti podľa potreby;
- Key Usage: začiarkneme „digital signature“, „key encipherment“, „tls server“ a tiež „key cert. sign“;
- následne potvrdíme cez Apply a stlačíme tlačidlo Sign;
- v novom okne stlačením Start spustíme proces generovania kľúča, po skončení bude certifikát hneď aktívny;
- tlačidlom Export môžeme uložiť verejný certifikát (.crt) a nahrať ho klientom.
Generovanie self-signed certifikátu cez webovú službu
Ďalšou možnosťou je získanie certifikátu pomocou webovej služby CertificateTools - stačí zadať doménové meno a stiahnuť si obe časti. Zadávame nasledovné údaje:
- X509v3 Extension Templates: pre web server volíme predvoľbu „Web Server“, pre VPN server „OpenVPN Server“ (bez ohľadu na typ servera);
- Common Name: zadáme požadované doménové meno (hlavné);
- Subject Alternative Names: zadáme požadované doménové meno (prípadne aj ďalšie alternatívy);
- Key Usage: pridáme „Certificate Sign“;
- CSR Options: ako druhú voľbu zadáme „Self-Sign“;
- po stlačení Submit stiahneme „Private Key“ a „PEM Certificate“.
Hoci je táto metóda veľmi pohodlná, pamätajme na zlaté pravidlo z úvodu kapitoly - súkromný kľúč nám vygeneroval cudzí server na internete. Pre účely výučby a experimentov je to úplne v poriadku, no v reálnom prostredí si musíme súkromný kľúč generovať vždy len lokálne na svojom zariadení!
Nasadenie TLS certifikátu pre web
Ako už dávno vieme, MikroTik RouterOS ponúka pre konfiguráciu okrem WinBox aplikácie aj vlastné webové rozhranie (WebFig). Hoci ho bežne nepoužívame, môže prísť vhod, no z hľadiska bezpečnosti je neprijateľné posielať prihlasovacie údaje cez obyčajný HTTP protokol bez šifrovania - preto nakonfigurujeme HTTPS prístup.
Môžeme využiť naše TLS certifikáty, ktoré sme si vytvorili, no v Classroom prílohe máme už pripravené aj 3 druhy certifikátov (vrátane privátnych kľúčov) pre doménové meno vyucba.ssnd.sk od rôznych vydavateľov:
- self-signed: SHA-256 / RSA-2048 s platnosťou 10 rokov;
- SSND.SK výučba CA: SHA-256 / RSA-2048 s platnosťou 4 roky;
- Let's Encrypt R12: SHA-256 / RSA-2048 s platnosťou 3 mesiace.
V každom priečinku sa nachádza viac súborov:
- verejný certifikát (.crt);
- súkromný kľúč (.key);
- certifikát certifikačnej autority (s výnimkou self-signed) a prípadne aj sprostredkovateľa.
Certifikáty na strane servera
Na stranu servera je potrebné importovať:
- svoj verejný certifikát (.crt) - nemusí byť označený ako dôveryhodný (trusted);
- svoj súkromný kľúč (.key) - k predošlému certifikátu sa doplní príznak K (Private Key);
- prípadný certifikát sprostredkovateľa (napr. Let's Encrypt R12) - nemusí byť trusted.
Spustenie HTTPS servera
Samotný webový server pre HTTPS spustíme veľmi jednoducho - vo WinBox ponuke IP → Services zvolíme certifikát, môžeme vyžadovať novšiu verziu TLS 1.2 cez položku TLS Version, prípadne zmeniť číslo portu:
Následne je potrebné nastavenia uložiť (Apply) a server spustiť (Enable). Prípadne môžeme obmedziť dostupnosť služieb, ktoré nechceme mať cez webové rozhranie dostupné - tlačidlom Web Server v ponuke IP → Services:
Certifikáty na strane klienta
Každý klient musí mať nainštalovaný ako dôveryhodný certifikát:
- a) verejný certifikát koreňovej CA (ISRG Root X1 / vlastná CA);
- b) v prípade self-signed certifikátu svoj verejný certifikát.
Pokiaľ ako klienta pripájame zariadenie s OS Windows a nepoužili sme certifikát od verejne známej CA, ktorú už pozná, je nutné chýbajúci certifikát „nainštalovať“. Ukladacím priestorom musí byť „Lokálny počítač“ a „Priestor na uloženie certifikátu“ musíme zvoliť ručne voľbou „Dôveryhodné koreňové certifikačné autority“.
Overenie a kontrola certifikátov
Pokiaľ si chceme overiť, či máme v poriadku TLS certifikát a dozvedieť sa o potenciálnych problémoch, či možnostiach zlepšenia, pomôže služba SSL Test od Qualys SSL Labs. Niekedy je však služba preťažená a overovanie môže trvať dlhší čas alebo byť dočasne nedostupné.




