Podpíšte sa elektronicky! – OpenSSL

Filip Valašek  /  31. 03. 2006, 11:55

Dnes si budete môcť vyskúšať generovanie kľúčov a certifikátov. Mierne sa zoznámime aj s voľne šíriteľným nástrojom OpenSSL. Cieľom je ozrejmiť na jednoduchých príkladoch postup, akým vzniká certifikát. Budete si tak môcť taký vlastný certifikát „chytiť“.

Minule som sľúbil, že si ukážeme, ako sa vytvárajú kľúče a certifikáty. Na demonštráciu postupu pomocou jednoduchých príkazov použijeme OpenSSL. Najprv chcem používateľov systému Windows ubezpečiť, že existuje aj jeho Win32 binárna distribúcia. No a pre Linuxákov alebo Unixákov iste nebude problém si OpenSSL nainštalovať.

Najpr vytvoríme adresárovú štruktúru, s ktorou bude OpenSSL pracovať. Na to som vytvoril krátke skripty. Tento prvý má názov ca-init (všetky sú zbalené v ca.zip). Ak by si ich niekto chcel vyskúšať vo Windowse, odporúčam nainštalovať Cygwin.

#!/bin/sh -x
CA=./ca
mkdir ${CA} ${CA}/certs ${CA}/crl ${CA}/newcerts ${CA}/private
echo "01" > ${CA}/serial
touch ${CA}/index.txt
chmod -R go-rwx ${CA}

Po vytvorení potrebnej štruktúry nájdeme v inštalácii súbor openssl.cnf a skopírujeme ho do adresára ca. V súbore upravíme premennú dir a nastavíme ju na ./ca.

Certifikačná autorita (CA)
Je to nejaká organizácia, ktorá je uznávaná a ňou vytvorené certifikáty sú považované za pravé. Každá CA má určitú politiku vytvárania certifikátov. Tú si môže každý preštudovať na stránke tejto autority a podľa toho sa rozhodne, či bude certifikát podpísaný touto autoritou uznávať alebo nie.

Na činnosť potrebuje CA svoj vlastný verejný kľúč, súkromný kľúč i certifikát. Vygenerujeme certifikát CA podpísaný vlastným privátnym kľúčom tejto CA (ca-ca):
#!/bin/sh -x
CA=./ca
openssl req -config ${CA}/openssl.cnf -new -x509 -days 365 \
-keyout ${CA}/private/cakey.pem -out ${CA}/cacert.pem

Pri spracovávaní sa najprv vytvorí privátny kľúč a tým sa potom podpíše certifikát. Vznikli nám teraz dva súbory. Jeden je privátny kľúč (cakey.pem) a druhý je certifikát (cacert.pem) podpísaný vytvoreným privátnym kľúčom. Je dobré si pre budúcu prácu zapamätať heslo, ktoré sme zadali.

Informácie o certifikáte si môžete jednoducho zobraziť príkazom:
openssl x509 -in ./ca/cacert.pem -text

Zístíte, že certifikát obsahuje v sebe aj verejný kľúč.

Vlastný certifikát
Na vytvorenie vlastného certifikátu potrebujeme požiadať CA. Tá nám ho vydá na základe žiadosti (ca-sc):
#!/bin/sh -x
CA=./ca
openssl req -config ${CA}/openssl.cnf -new \
-keyout ${CA}/private/newkey.pem -out ${CA}/certs/newreq.pem

Opäť nám vznikli dva súbory: súkromný kľúč a tentoraz nie certifikát, ale žiadosť o certifikát. Žiadosť o certifikát je možné tiež zobraziť v čitateľnej forme:
openssl req -in ./ca/cacert.pem -text

Súčasťou žiadosti je tiež verejný kľúč žiadateľa, podobne ako to bolo pri certifikáte.

Žiadosť doručíme certifikačnej autorite a tá nám na základe svojich pravidiel vydá certifikát. Každá CA má iné pravidlá overovania totožnosti. Ako to platí u nás podľa súčasnej legislatívy, to si povieme niekedy inokedy.

Vytvoríme certifikát, teda podpíšeme žiadosť (teraz príde na rad naše heslo, ktoré sme nemali zabudnúť):
#!/bin/sh -x
CA=./ca
openssl ca -config ${CA}/openssl.cnf -days 7 \
-policy policy_anything \
-out ${CA}/certs/newcert.pem -infiles ${CA}/certs/newreq.pem

Okrem vzniku súboru newcert.pem sa udialo viacej zmien. Máme nový súbor newcerts/01.pem ako zálohu certifikátu a tiež sa v súbore serial inkrementovalo číslo z 01 na 02. Tiež sa zmenil index.txt. Tam sú vypísané všetky certifikáty aj s dobou platnosti.

Zrušenie certifikátu
Každý certifikát má určitú dobu platnosti. Avšak niekedy nastanú skutočnosti, ktoré nás nútia certifikát predčasne zneplatniť (stratíme ho, niekto ho ukradne,...). Vtedy prichádza na rad Certificate Revocation List (CRL). O správu CRL sa stará CA. Je to vlastne súbor, v ktorom sú zapísané zneplatnené certifikáty. Je pravidelne obnovovaný. Na začiatku bude „prázdny", pretože sme ešte nezrušili žiaden certifikát (ca-crl):
#!/bin/sh -x
CA=./ca
openssl ca -config ${CA}/openssl.cnf -gencrl \
-keyfile ${CA}/private/cakey.pem -cert ${CA}/cacert.pem \
-out ${CA}/crl/cacrl.pem

Presvedčíme sa o prázdnosti:
openssl crl -in ./ca/crl/cacrl.pem -text

Zneplatníme jediný certifikát, ktorý máme (ca-rev):
#!/bin/sh -x
CA=./ca
openssl ca -config ${CA}/openssl.cnf \
-revoke ${CA}/newcerts/01.pem \
-keyfile ${CA}/private/cakey.pem -cert ${CA}/cacert.pem

Opäť spustíme skript ca-crl, čim obnovíme CRL a potom už je jednoduché sa presvedčiť, že naozaj sa nám všetko podarilo spustením
openssl crl -in ./ca/crl/cacrl.pem -text

Nabudúce (7.4.2006)
V ďalších dvoch či troch dieloch sa budem venovať situácii okolo elektronického podpisu u nás. Uvedieme si, kde sa môže používať elektronický podpis, kde musíme používať zaručený a tiež, aký je v tom rozdiel a prečo to tak je. V diskusii pod článkom uvítam akékoľvek nápady, čo by ste chceli, aby tento seriál obsahoval a v prípade otázok ma môžete kontaktovať aj mailom.

Neprehliadnite: