13.7 Vlastná certifikačná autorita
Certifikát podpísaný vlastnou certifikačnou autoritou
Hoci to na prvý pohľad môže vyzerať ako nezmysel, pre vlastné VPN spojenia a tunely nie je nutné využívať verejnú certifikačnú autoritu (CA) - môžeme si vytvoriť vlastnú a jej verejný kľúč nasadiť na zariadenia pod našou správou. Je to podobná situácia ako self-signed certifikáty s tým rozdielom, že self-signed je v tomto prípade certifikačná autorita.
Vytvorenie certifikačnej autority
Vytvorenie vlastnej CA, ako aj vydávanie a podpisovanie vlastných certifikátov, umožňuje aj MikroTik RouterOS cez WinBox ponuku System → Certificates - cez záložku Certificates dáme pridať nový certifikát pre CA:
- Name, Common Name: ľubovoľný názov našej CA;
- Key Size: vzhľadom na dlhú dobu platnosti zvyknú mať CA dlhší kľúč (4096 bitov);
- Days Valid: počet dní platnosti CA býva bežne niekoľko rokov;
- Key Usage: začiarkneme „key cert. sign“;
- potvrdíme cez Apply a následne stlačíme tlačidlo Sign;
- po stlačení Start sa vygeneruje kľúč a CA sa stane funkčnou;
- tlačidlom Export môžeme uložiť verejný certifikát našej CA a nahrať ho klientom.
Vytvorenie certifikátu
Následne môžeme vytvárať bežné certifikáty a podpisovať ich:
- Name: môžeme zadať doménové meno, prípadne aj s dodatkom o našej CA;
- 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 kľúča;
- Days Valid: môžeme zadať počet dní platnosti podľa potreby;
- Key Usage: začiarkneme „digital signature“, „key encipherment“, „tls server“;
- potvrdíme cez Apply a následne stlačíme tlačidlo Sign;
- zvolíme našu CA, po stlačení Start sa vygeneruje kľúč a certifikát bude aktívny;
- tlačidlom Export môžeme uložiť verejný certifikát, po zadaní hesla (Export Passphrase) bude uložený aj súkromný kľúč.
Odvolanie certifikátu
Medzi CA a ňou podpísanými certifikátmi je väzba - certifikáty nie je možné zmazať, ale je možné ich odvolať (Revoke). Po zmazaní CA sa bez varovania zmažú aj všetky ňou podpísané certifikáty.
Bezpečnostné hľadisko vlastnej CA
Využitie vlastnej CA je úplne v poriadku, pokiaľ vydávame certifikáty pre účely tunelov a VPN spojení smerovačov a iných sieťových zariadení. Je však treba byť mimoriadne obozretný v prípade, že klientmi nie sú naše sieťové zariadenia, ale priamo počítače našich používateľov.
Zaradenie našej vlastnej CA medzi dôveryhodné koreňové CA do počítača kladie na nás veľmi veľkú zodpovednosť a žiadať našich klientov, aby si nainštalovali certifikát našej CA bez obmedzení do svojho vlastného počítača, je už za hranicami prijateľnosti.
Je potrebné uvedomiť si, že dôveryhodná koreňová CA bez obmedzení môže vystaviť certifikát na čokoľvek, teda i na akékoľvek cudzie doménové meno. Máme úplnú istotu, že nedôjde k úniku privátneho kľúča našej CA? Máme istotu, že k tomu nedôjde aj v budúcnosti, keď našu pozíciu prevezme niekto iný? Privátny kľúč uložený na zariadení MikroTik nemôžeme považovať za bezpečne uložený. Každý, kto má prístup k zariadeniu, má možnosť exportovať privátny kľúč. Aj miestny správca zariadenia (smerovača, servera) teda predstavuje potenciálne riziko pre všetkých klientov organizácie.
Vnútená certifikačná autorita
Zamyslime sa nad dvoma situáciami z hľadiska bezpečnosti a zneužiteľnosti:
- Každý, kto elektronicky komunikuje so štátom a využíva elektronické podpisovanie dokumentov cez občiansky preukaz s čipom (napríklad pre účel podania daňového priznania), si musí nainštalovať potrebný softvér. Ten medzi dôveryhodné koreňové CA používateľa pridáva Ditec D.Launcher CA (vygenerovaná CA v konkrétnom zariadení, bez obmedzení).
- Bezpečnostné balíky (antivírusy), ktoré majú kontrolovať aj HTTPS komunikáciu, pri svojej inštalácii inštalujú vlastnú koreňovú CA, napríklad ESET SSL Filter CA (vygenerovaná CA v konkrétnom zariadení, bez obmedzení).
Obmedzenie platnosti CA
Vo všeobecnosti certifikáty umožňujú definovať veľmi dôležité obmedzenia:
- obmedziť úroveň vnorenia, teda definovať, či CA môže vytvoriť podriadenú CA, resp. do akej hĺbky (obmedzenie basicConstraints);
- definovať obmedzenia týkajúce sa názvu domény, pre ktorú je možné vystavovať certifikáty (obmedzenie nameConstraints).
Ani jedno, ani druhé však MikroTik RouterOS neumožňuje definovať. Navyše, podľa špecifikácií nie sú obmedzenia týkajúce sa názvu subjektu určené pre koreňové CA - softvér je povinný kontrolovať toto obmedzenie len pre CA nižších úrovní (sprostredkovateľské). Niektoré aplikácie a systémy rešpektujú tieto obmedzenia aj pri ich definovaní na úrovni koreňovej CA, no niektoré nie.
Vytvorenie vlastnej CA s obmedzeniami
Pokiaľ to teda s vlastnou CA myslíme vážne, je nutné CA vytvoriť inou cestou, napríklad cez softvér OpenSSL a dodržať ďalšie pravidlá:
- koreňovú CA s dlhou dobou platnosti prevádzkovať na offline zariadení (bez prístupu do siete) - napríklad na odloženom starom počítači, či na Raspberry Pi;
- toto zariadenie (resp. aspoň médium, napr. pamäťovú kartu) držať bezpečne v trezore spolu s núdzovým výtlačkom privátneho kľúča (ak by došlo k poškodeniu média) - koreňovú CA bude treba zapínať len raz za niekoľko rokov pre účely vytvorenia / obnovy sprostredkovateľských CA;
- koreňovej CA je vhodné nastaviť obmedzenie hĺbky vnorenia na hodnotu 1 a tiež obmedzenie nameConstraints (hoci ho v súčasnosti nerešpektuje každý softvér);
- koreňovej CA je vhodné tiež nastaviť aj možnosť revokácie certifikátov (CRL);
- pre MikroTik RouterOS si vytvoriť samostatnú sprostredkovateľskú CA s obmedzením hĺbky vnorenia na 0 a nameConstraints pre našu doménu a kratšou dobou platnosti (zopár rokov);
- pre vydávanie certifikátov serverom si rovnako vytvoriť ďalšiu obmedzenú samostatnú sprostredkovateľskú CA, ktorá môže byť k dispozícii na online serveri;
- všetky koncové certifikáty vydávať len sprostredkovateľskými CA.
MikroTik RouterOS sa bráni využívaniu CA, ktoré v ňom neboli vytvorené. Z praktických experimentov sa ukázalo, že pre akceptovanie CA stačí nastaviť komentár 'Generated by RouterOS' do vlastnosti nsComment. Na ukážku je v Classroom prílohe certifikát CA (aj s privátnym kľúčom) s obmedzením pre doménu „vyucba.ssnd.sk“.
Odporúčané parametre pre generovanie certifikátov v OpenSSL:
- koreňová CA:
- subjectKeyIdentifier=hash
- basicConstraints=critical,CA:true,pathlen:1
- keyUsage=critical,keyCertSign
- nameConstraints=critical,permitted;DNS:{doména}
- crlDistributionPoints=URI:{URL adresa CRL}
- sprostredkovateľská CA:
- subjectKeyIdentifier=hash
- authorityKeyIdentifier=keyid:always,issuer
- basicConstraints=critical,CA:true,pathlen:0
- keyUsage=critical,digitalSignature,keyCertSign
- nameConstraints=critical,permitted;DNS:{doména}
- pre MikroTik RouterOS: nsComment='Generated by RouterOS'
- certifikát servera:
- subjectKeyIdentifier=hash
- authorityKeyIdentifier=keyid,issuer
- basicConstraints=CA:false
- keyUsage=digitalSignature,keyEncipherment
- extendedKeyUsage=serverAuth
- subjectAltName=DNS:{doménové meno}
- subjectKeyIdentifier=hash
Centrálna správa certifikátov
Pokiaľ máme veľa rôznych serverov, na ktorých potrebujeme opakovane vydávať (krátkodobé) certifikáty, je vhodné využiť SCEP server. Ten je tiež dostupný v MikroTik RouterOS:
- na zariadení s CA pridáme SCEP Server pre daný certifikát CA, do Path je potrebné zadať URL cestu začínajúcu „/scep/“, napríklad
/scep/vyucba; - na zariadení, ktoré potrebuje vydať certifikát, ho vytvoríme bežným postupom, no namiesto Sign požiadame o podpísanie certifikátu tlačidlom Sign via SCEP, kde zadáme URL nášho SCEP servera (napríklad
http://vyucba.ssnd.sk/scep/vyucba); - na SCEP serveri môžeme potvrdiť vystavenie certifikátu (Grant);
- prípadne je možné na strane SCEP servera vopred vygenerovať jednorazové heslo (OTP) a to zadať pri žiadosti o podpísanie certifikátu.
Takto vygenerovaný certifikát sa bude obnovovať plne automaticky vždy po uplynutí 3/4 doby platnosti.