Generování klíčů pro PostSignum QCA v OpenSSL Vytvořil: ICZ, ost 6.10.2005
Úvod V tomto textu je popsán způsob generování dvojice klíčů a žádosti o certifikát v programovém balíku OpenSSL, import vydaného certifikátu a vytvoření souboru obsahujícího soukromý klíč i certifikát ve formátu PKCS#12. Kromě použití nástroje PostSignum Tool a stránek na https://qca.postsignum.cz je použití balíku OpenSSL další z mnoha možností jak generovat dvojici klíčů, vytvořit žádost o certifikát a spojit vydaný certifikát se soukromým klíčem. Postup je vhodný zejména pro uživatele se znalostí kryptografie a alespoň základní znalostí programového balíku OpenSSL. Použití OpenSSL má (na rozdíl od výše uvedených možností doporučovaných PostSignum QCA) následující omezení:
v žádostech generovaných v OpenSSL podle níže uvedeného postupu nebude obsažena položka funkce zaměstnance v organizaci (v případě PostSignum QCA obsažená v rozšíření žádosti SubjectDirectoryAttribute),
při zadávání údajů může dojít k problémům se vstupem češtiny (v závislosti na operačním systému a konfiguraci prostředí). Tyto odchylky však nepředstavují zásadní problém - při vydání certifikátu budou nesprávné údaje opraveny a chybějící doplněny.
Příklady a konvence V příkladech uvedených v tomto textu budeme předpokládat, že certifikát je generován pro zaměstnance organizace a bude obsahovat tyto údaje: Jméno organizace: IČ: Organizační jednotka: Jméno zaměstnance: Číslo zaměstnance: Emailová adresa:
ABC software, s.r.o. 12345678 IT Petr Kroupa 123
[email protected]
Dále budou vytvářeny soubory pojmenované kroupa2005.* (přípony různé podle potřeby). Níže v textu budou dále použity následující konvence zápisu pro text příkazu a jméno souboru.
Příprava prostředí Programový balík OpenSSL je možné získat na adrese http://www.openssl.org, kde je umístěna i příslušná dokumentace. Pro generování žádostí maximálně podobných žádostem vyžadovaným PostSignum QCA je nutné použít upravený konfigurační soubor. Buď je možné upravit standardní konfigurační soubor instalace OpenSSL a nebo je možné použít speciální konfigurační soubor, který bude u jednotlivých příkazů zadáván z příkazové řádky jako parametr. U uvedených příkladů bude použita druhá možnost. Konfigurační soubor přizpůsobený pro generování žádostí pro PostSignum QCA má následující obsah: # konfiguracni soubor pro generovani klicu a zadosti pro certifikacni # autoritu PostSignum # vice informaci viz. http://qca.postsignum.cz [ req ] # default_bits # default_keyfile distinguished_name req_extensions
= = = =
1024 privkey.pem req_distinguished_name v3_req
# This sets a mask for permitted string types. There are several options. # default : PrintableString, T61String, BMPString. # pkix : PrintableString, BMPString. # utf8only : only UTF8Strings. # nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). # MASK :XXXX a literal mask value. # WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings # so use this option with caution! # string_mask = nombstr string_mask = default [ req_distinguished_name countryName = countryName_default = countryName_min = countryName_max =
] Nazev statu ("CZ") CZ 2 2
localityName
= Adresa (mesto ulice cislo)
organizationName
= Jmeno organizace a IC
0.organizationalUnitName= Organizacni jednotka 1.organizationalUnitName= Cislo zamestnance commonName osobu, tituly) commonName_max
= Jmeno certifikatu (jmeno a prijmeni pro fyzickou
emailAddress emailAddress_max
= E-mailova adresa = 64
[ v3_req ]
= 64
# Extensions to add to a certificate request # basicConstraints = CA:FALSE # keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName
= email:move
Soubor je možné stáhnout i zde.
Generování klíče a žádosti Pro generovaní páru klíčů a vytvoření žádosti ve formátu PKCS#10 je možné použít příkaz openssl req -newkey rsa:[velikost_klice] -keyout [soubor_klice] -out [soubor_zadost] -config [soubor_config]
kde jednotlivé uvedené položky mají následující význam: [velikost_klice] … velikost RSA klíče v bitech, tedy 1024 nebo 2048 [soubor_klice] … jméno souboru pro uložení soukromého klíče [soubor_zadost] … jméno souboru pro uložení žádosti o certifikát (formát DER) [soubor_config] … jméno souboru s upravenou konfigurací U ukázkového žadatele - zaměstnance by byl použit následující příkaz: openssl req -newkey rsa:2048 -keyout kroupa2005.key -out kroupa2005.req -config postsignum.cnf
Po spuštění příkazu bude nutné zadat heslo chránící soukromý klíč a následně zadat obsah jednotlivých položek žádosti. Při výběru vyplňovaných položek je možné se inspirovat následující tabulkou. Položka
Název státu Adresa Jméno organizace a IČ Organizační jednotka Číslo zaměstnance Jméno certifikátu
ověření elektronického podpisu zaměstnance povinná položka - text „CZ“ povinná položka*) nepovinná položka povinná položka
Certifikát pro … pro ověření ověření elektronické elektronického značky podpisu fyzické organizace osoby povinná položka povinná položka - text „CZ“ - text „CZ“ nepovinná položka povinná položka*) nepovinná položka -
ověření elektronické značky fyzické osoby povinná položka - text „CZ“ nepovinná položka -
povinná položka povinná položka povinná položka povinná položka - jméno a - jméno a příjmení příjmení Emailová adresa nepovinná nepovinná nepovinná nepovinná položka položka položka položka *) … formát položky je: jméno_organizace [IČ příslušné_IČ], tedy například ABC software, s.r.o. [IČ 12345678]
Při vyplňování je nutné být velice opatrný při používání editačních kláves jako BACKSPACE, směrových šipek a podobně. OpenSSL může (podle použitého operačního systému a verze) umisťovat znaky skryté pod těmito klávesami do položek v žádosti, což způsobí její neplatnost. Alternativou je možnost zadat celý obsah žádosti o certifikát z příkazové řádky, například openssl req -newkey rsa:2048 -keyout kroupa2005.key -out kroupa2005.req -subj "/C=CZ/O=ABC software, s.r.o. [IC 12345678]/OU=IT/OU=123/CN=Petr Kroupa/
[email protected]" -config postsignum.cnf
Vydání certifikátu Na základě vytvořené žádosti (např. kroupa2005.req) je na pracovišti České pošty vydán certifikát jmeno_zadosti.crt (např. kroupa2005.crt). Dále jsou žadateli o certifikát nakopírovány certifikáty certifikační autority postsignum_qca_root.crt a postsignum_qca_sub.crt. Všechny certifikáty jsou uživateli standardně předány ve formátu DER. Je možné požádat obsluhu kontaktního místa o předání všech certifikátů rovněž ve formátu PEM.
Import certifikátu, vytvoření souboru PKCS#12 Před sloučením vydaného certifikátu a soukromého klíče do jednoho souboru ve formátu PKCS#12 je nutné převést všechny certifikáty z formátu DER do formátu PEM, se kterým OpenSSL standardně pracuje. Pro převedení je možné použít příkaz openssl x509 -in [soubor_der] -inform DER -out [soubor_pem] -outform PEM
kde jednotlivé uvedené položky mají následující význam: [soubor_der] … jméno souboru s certifikátem ve formátu DER [soubor_pem] … jméno souboru s certifikátem ve formátu PEM. U ukázkového žadatele by byly použity následující příkazy: openssl x509 -in kroupa2005.crt -inform DER -out kroupa2005.pem -outform PEM
Pokud je potřeba umístit do výsledného PKCS#12 souboru i certifikáty autorit, je nutné tyto opět převést do formátu PEM a před použitím spojit do jednoho souboru. Pro spojení je možné použít více metod v závislosti na použitém operačním systému (např. pomocí příkazu cat v OS Unix/Linux); na pořadí certifikátů ve spojeném souboru nezáleží. Uvažovaný příklad by byl v tomto případě rozšířen o následující příkazy: openssl x509 -in postsignum_qca_root.crt -inform DER -out postsignum_qca_root.pem -outform PEM openssl x509 -in postsignum_qca_sub.crt -inform DER -out postsignum_qca_sub.pem -outform PEM
cat postsignum_qca_root.pem postsignum_qca_sub.pem > postsignum_qca.pem
Spojení soukromého klíče, vydaného certifikátu a případně i certifikátů autorit se provede příkazem openssl pkcs12 -export -name [friendly_name] -in [soubor_certifikat] -inkey [soubor_klice] -out [soubor_p12] -certfile [soubor_CA]
kde jednotlivé uvedené položky mají následující význam: [friendly_name] … text blíže označuje dvojici soukromý klíč a certifikát [soubor_certifikat] … jméno souboru s certifikátem (formát PEM) [soubor_klice] … jméno souboru se soukromým klíčem [soubor_p12] … jméno souboru pro uložení klíče a certifikátu ve formátu PKCS#12 [soubor_CA] … jméno souboru s certifikáty certifikačních autorit (ve formátu PEM) - volitelná možnost Například tedy: openssl pkcs12 -export -name "Josef Kroupa 2005" -in kroupa2005.pem -inkey kroupa2005.key -out kroupa2005.p12 -certfile postsignum_qca.pem
v případě vložení certifikátů autorit nebo openssl pkcs12 -export -name "Josef Kroupa 2005" -in kroupa2005.pem -inkey kroupa2005.key -out kroupa2005.p12
pokud vložení certifikátů autorit není nutné. Po spuštění příkazu je nutné zadat jednou heslo k souboru s klíčem a dvakrát heslo k nově vytvářenému souboru ve formátu PKCS#12. Tento soubor je možné importovat do většiny používaných aplikací.