32.2. Vytvoření certifikační autority ručně s pomocí OpenSSL

Nejdříve si ukážeme jak si takovou certifikační autoritu sami vytvoříme jen s pomocí OpenSSL. Vše co potřebujeme je balíček s programem který se na Debian Etch jmenuje openssl. Pokud jej nemáme nainstalován, nainstlaujeme:

# aptitude install openssl

Nyní si vybereme kde budeme mít adresář s certifikační autoritou. Mnou uváděný postup provádí vytvoření a práci s certifikační autoritou pod uživatelem. Já jsem si pro ukázkovou certifikační autoritu vybral adresář ~/firma/ca. Při tomhle postupu si jako užvatel můžeme udržovat několik certifikačních autorit. Vytvoříme tedy adresář a přepneme se do něj.

$ mkdir -p ~/firma/ca
$ cd ~/firma/ca

Nyní potřebujeme konfigurační soubor pro openssl. Protože si tento budeme upravovat pro každou certifikační autoritu, nakopírujeme si ukázkový soubor do právě vytvořeného adresáře. Jako ukázkový jsem použil ten standardně instalovaný s balíčkem openssl jenž se nachází v /etc/ssl/openssl.cnf.

$ cp /etc/ssl/openssl.cnf .

Konfigurační soubor si upravíme. Nejdříve nastavíme adresář v kterém budou všechny soubory. Tento bude ~/firma/ca/ca. Parametr jímž tak činíme se jmenuje dir a nachází se v sekci [ CA_default ].

[ CA_default ]
dir = ./ca

Tato změna úplě stačí pro funkčnost. Ale je lépe podívat se i na několik dalších parametrů a nastavit si je přesně podle potřeb konkrétní certifikační autority. Jedná se v první řadě o parametry v sekci [ req_distinguished_name ], které popisují komu je certifikát vydáván. Protože předpokládám že certifikáty vydávate pro vlastní potřebu, nebo potřebu firmy v které pracujete, má smysl tyto předvyplnit.

[ req_distinguished_name ]
countryName_default = CZ
stateOrProvinceName_default = .
localityName_default = Praha
0.organizationName_default = Firma, s.r.o.
organizationUnitName_default = IT oddeleni

Další nastavení které považuji za užitečné je zmena policy v souvislosti s parametrem stateOrProvinceName. Tento je totiž vyžadován, a v našem prostředí nemá smysl. Proto jej nastavím na optional. Parametr se nachází v sekci [ policy_match ]

[ policy_match ]
stateOrProvinceName = optional

Z řady parametrů ještě uvedu jeden, a to default_days který určuje počet dní na které je certifikát vydávan. Tedy počet dní ode dneška po které je certifikát platný. Po vypršení této doby je nutné certifikát prodloužit. Tento parametr se nachází v sekci [ CA_defaults ]

default_days=3600

Můžeme dle vlastní potřeby modifikovat i další parametry, tady laskavého čtenáře odkáži na dokumentaci k programu OpenSSL.

Máme vytvořen a k vlastnímu obrazu uprave konfigurační soubor a nyní si vytvoříme potřebné adresáře. Je to jednak samotný adresář ca ve kterém jsou všechny soubory certifikační autority, tak ji jeho podadresáře.

$ mkdir ca
$ mkdir ca/newcerts
$ mkdir ca/private
$ chmod 0700 ca/private

Dále si vytvoříme index certifikátů a inicializujeme jejich počitadlo.

$ touch ca/index.txt
$ echo 01 >ca/serial

Rovněž nastavíme přístupová práva aby se k naší certifikační autoritě nedostal nikdo jiný. Znalost klíče by mu titiž umožnila vydávat falešné certifikáty.

$ chmod 0700 ~/firma/ca
$ chmod 0700 ca

Máme vytvořeny adresáře a vytvoříme samotnou certifikační autopritu.

$ cd ~/firma/ca
$ openssl req -config openssl.cnf -new -x509 -out cacert.pem -keyout cakey.pem -days 7500 -newkey rsa:4096

Při vytváření klíče certifikační autority jsme vyzváni k zadání přístupové fráze k tomuto klíči. Pomocí fráze je samotný klíč zašifrován, takže dostane-li se k němu nepovolaná posoba, nemůže jej bez znalosti fráze použít. Tuto frázi je ovšem nutno zadávat kdykoliv se klíč použije, tedy při podepisování každé žádosti o certifikát. Jsme li si jistí že se k našemu klíči nikod nedostane, a potřebujeme li podepisování automatizovat, můžem zašifrování klíče pomocí přístupové fráze vypnout přepínačem -nodes.

FIXME: Upozornil bych na použití přepínače -des3 který zajistí že samotný klíč bude zašifrován pomocí přístupové fráze. Toto je důležité neb kdyby se někdo dostal k souboru s klíčem, potřebuje pro jeho použití ještě znát přístupovou frázi. Na druhou stranu to taky znamená, že kdykoliv budeme chtít naší autoritou podepsat připravenou žádost, musíme zadávat přístupovou frázi. Pokud jsme si zcela jisti, že se k našemu klíči nikdo nedostane a zadavání fráze je pro nás velká překážka pro automatické podepisování žádostí, odstraníme tento přepínač a použijeme místo něj jiný -nodes.

Protože program openssl očekává konfigurační soubor na standardních místech jako je /etc/ssl/openssl.cnf, musíme mu oznámit že má použít náš. Tak učiníme parametrem -config openssl.cnf. Místo tohoto parametry je možné použít proměnnou prostředí OPENSSL_CONF. To s výhodou učiníme později až budeme práci s certifikáty zjodnodušovat vytvořením několik vlastních skriptů.

Dalším parametrem na který bych chtěl upozornit je -days 7500. Tento určuje dobu trvání certifikátu, tedy do kdy platí, v počtu dní ode dneška. V případě certifikátu certifikační autority zvolíme dostatečně velkou hodnotu. V uvedeném případě je to cca 20 let.

A poslední parametr který zmíním je -newkey rsa:4096. Tento určuje délku rsa klíče v bitech. Pro dnešní dobu je doporučované minimum 2048. Protože se jedná o klíč certifikační autoritiy, použiji raději klíč delší a to 4096 bitů dlouhý.

Vytvořené soubory umístníme na místo kde jsou očekávany a nastavíme jim přístupová práva.

$ mv cacert.pem ca/         # certifikát autority, veřejný soubor
$ chmod 0400 cakey.pem      # soukromý klíč autority, je neveřejný
$ mv cakey.pem ca/private   # a je očekáván v tomto adresáři

Tímto máme certifikační autoritu připravenu k použití, k podepisování žádostí o certifikáty. Jak se toto dělá, si popíšeme v následující části.