openssl, vytvorenie CA struktury a chain certifikatov

13.10.2008 | 17:27 | Konfigurácia | kveri
Postup generovania chainov certifikatov a klucov
1. Vygeneruje kluc pre ROOT CA a poziadavok na podpisanie
2. Podpiseme certifikat ROOT CA samotnou ROOT CA
3. Vygeneruje kluc druhej CA
4. Podpiseme certifikat druhej CA certifikatom s klucom ROOT CA
5. Vygenerujeme kluc clientovi
6. Podpiseme certifikat clientovi druhou CAckou

* CA = Certification Authority vid. wiki
** druhou CA sa mysli CA podradena ROOT CA, cize nieco ako vydavatelska CA.
*** ked budem hovorit kluc vzdy myslim privatny (sukromny) kluc, ktory je zaheslovany a nazov vyzera takto nieco_key.pem

Moj postup bol asi takyto: robil som to na gentoo, pouzil som adresar /etc/ssl/misc, ktory je urceny prave na generovanie takychto veci. No nepouzil som vstavany script CA.pl ani CA.sh, ale rucne prikazy ako mozete vidiet, pretoze ten vstavany script mi nevedel podpisat CAcku inou CAckou a to je tu potrebne.

Zvolte a vytvorte si nejaky adresar napriklad ~/certs, v ktorom budete skladovat kluce, certifikaty a ostane veci

v nom vytvorte adresare takto:
/root/certs:
- certs
- crl
- newcerts
- private

A subory:
/root/certs:
- index.txt (prazdny)
- crlnumber s obsahom 01.

Prikazy:
Vytvorenie struktury adresarov:
mkdir ~/certs
mkdir ~/certs/certs
mkdir ~/certs/crl
mkdir ~/certs/newcerts
mkdir ~/certs/private
touch ~/certs/index.txt
echo "01" >> ~/certs/crlnumber

Nepytajte sa ma preco je to treba takto spravit, sam neviem preco to tak openssl ca vyzaduje, ale je to tak.

Dalej je potrebne si skopirovat subor (na gentoo) /etc/ssl/openssl.cnf (niekde mozno .conf) do adresaru ~/certs. V nom budeme upravovat par veci.
v CentOS je podla tomsa v /etc/pki/tls/, odporucam pouzit locate openssl.cnf.

Nasledovne si vytvorime nasu hlavnu CAcku, ktora nebude signovat ziadne konecne certifikaty (aspon v tomto pripade), ale tato funkcia samozrejme bude mozna.

Dlzku kluca si mozete nastavit napriklad v subore ~/certs/openssl.cnf, hladajte default_bits. Odporucam 4096 alebo lepsie 8192, kto ma dobry komp a nevadi mu pockat par minut moze aj 16384 ale to uz je aj na mna moc :).
1.
Najprv si teda vygenerujeme kluc a poziadavku na podpisanie certifikatu. Heslo moze byt akekolvek ale vzhladom na to, ze toto je hlavna CA odporucam pouzit aspon 16 znakov najlepsie nieco typu L26nD.a]1\56Z
openssl req -new -keyout rootca_key.pem -out rootca_csr.pem

2.
Nasledovne si podpiseme certifikat hlavnej CAcky samotnou hlavnou CAckou (nezalezi na tom, kto tento certifikat podpise, ale kedze tento navod nezahrna postup podpisovania doveryhodneho certifikatu doveryhodnou CAckou [verisign, trust atd], ostanem pri tom, ze CAcka podpise samu seba.)
prvy parameter ca znamena, ze ideme pouzivat openssl s funkciami CA, -create_serial znamena, ze chceme aby openssl vytvorilo serialkluc a zapisalo ho do index.txt, pouziva sa to na neskorsie zrusenie certifikatu. Treti parameter -out je vystup, cize samotny podpisany certifikat. -days na kolko dni ma byt platny (pri hlavnej CAcke je vhodne zvolit aj viac ako 10 rokov podla toho ako sa citite :), -selfsign znamena, ze CA podpise samu seba a tzn. netreba certifikat ani kluc inej nadradenej entity (inej CAcky), -keyfile je vstup, konkretne je to kluc ktory sa pouzil na vygenerovanie poziadavky na podpisanie, budete vyzvany k nemu zadat heslo, ktore ste zadavali v kroku c. 1. Program sa vas dalej spyta na nejake info o CAcke, vsetko by ste mali vediet vyplnit a ked pridete ku Common Name (CN), tak zbystrite, pretoze pri dalsich certifikatoch (ktore sa uz budu pouzivat na preukazovanie pravosti jednotlivych sluzieb bude tato volba dolezita), nateraz mozete dat napriklad meno vasej firmy, alebo vase meno, alebo nieco pod cim bude kazdy vediet o koho ide.
Optional volby mozete nechat prazdne. Dalsi parameter -extensions v3_ca znamena, ze tato CAcka bude v skutocnosti CAckou (cize bude moct podpisovat dalsie certifikaty) a nie len certifikatom, ktory je konecny prvok v retazi dovery :). Ak by ste tento parameter vynechali budete mat nastavene v certifikate CA:FALSE, tzn. nebudete moct vytvarat dalsie certifikaty a to nechceme, kedze je to hlavna CA. -in je vstup ziadosti na podpisanie certifikatu.
Este nieco ku -keyfile, ked podpisujete certifikat v skutocnosti nepotrebujete kluc, staci vam csr, preco je tu teda kluc? No pretoze je tam -selfsign, ked nieco podpisujete potrebujete svoj kluc (kluc svojej CAcky) a kedze CA podpisuje v tomto pripade samu seba, tak musi pouzit svoj kluc, aby bola podpisana sama sebou. Neskor pri generovani dalsich casti bude -keyfile vzdy kluc nadradenej entity.
openssl ca -create_serial -out rootca_crt.pem -days 3650 -selfsign -keyfile rootca_key.pem -extensions v3_ca -in rootca_csr.pem

Hlavnu CA mame vygenerovanu, subor rootca_csr.pem mozete zmazat pretoze uz mate vygenerovany certifikat a je vam nanic, iba zeby ste stratili certifikat, ale potom si mozete z kluca (rootca_key.pem) znovu vytvorit rootca_csr.pem, cize ziadost o vydanie certifikatu takze je to uz nepotrebny subor.

3.
Pokracujeme vytvorenim kluca a ziadosti o certifikat pre druhu, takzvanu vydavatelsku certifikacnu autoritu, ktora uz realne bude vytvarat end-user (alebo skor end-server ;) certifikaty. Postup je taky isty ako pri root CAcke.
openssl req -new -keyout server_key.pem -out server_csr.pem

4.
Takisto si podpiseme tuto CAcku s nasledovnymi zmenami: tato CAcka uz nebude selfsigned (podpisana sama sebou) ale bude podpisana nadradenou CAckou, cize tu, ktoru sme si pred chvilou vytvorili. parametre ca, -create_serial, -out, -days zostavaju take iste (-days je dobre nastavit na menej ako pri hlavnej CAcke), urcite ste si vsimli, ze som vynechal -selfsign, pretoze tato CA uz nebude podpisovana sama sebou, kedze teda nebude podpisovana sama sebou bude podpisovana hlavnou CA, preto je tu parameter -cert = certifikat hlavnej CAcky a parameter -keyfile = kluc hlavnej CAcky. Dalsie parametre tak ako predtym, vsimnite si, ze este stale pouzivam -extesions v3_ca, kedze chcem aby tato entita bola znovu CAckou (mohla podpisovat certifikaty). -in je vstup ziadosti o podpisanie certifikatu, ktory sme vygenerovali v kroku 3.
openssl ca -create_serial -out server_crt.pem -days 365 -cert rootca_crt.pem -keyfile rootca_key.pem -extensions v3_ca -in server_csr.pem

5.
Dalej si vygenerujeme kluc a ziadost o podpisanie certifikatu pre klienta (klient preto, lebo je to klient CAcky, toto moze byt webserver, postfix, pop3 server, imap server, cokolvek co podporuje SSL a certifikaty)
openssl req -new -keyout client_key.pem -out client_csr.pem

6.
Znovu, takisto ako v kroku 4. podpiseme certifikat pre klienta vydavatelskou CAckou (ktoru sme tvoril v kroku 3 a 4). Teraz
openssl ca -create_serial -out client_crt.pem -days 365 -cert server_crt.pem -keyfile server_key.pem -in client_csr.pem

NEDOKONCENE!

História úprav