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 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: ABC software, s.r.o. IČ: 12345678 Organizační jednotka: IT Jméno zaměstnance: Petr Kroupa Číslo zaměstnance: 123 Emailová adresa: petr.kroupa@abc.cz 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 = 1024 # default_keyfile = privkey.pem distinguished_name = req_distinguished_name req_extensions = 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 = Nazev statu ("CZ") countryname_default = CZ countryname_min = 2 countryname_max = 2 localityname organizationname = Adresa (mesto ulice cislo) = Jmeno organizace a IC 0.organizationalUnitName= Organizacni jednotka 1.organizationalUnitName= Cislo zamestnance commonname = Jmeno certifikatu (jmeno a prijmeni pro fyzickou osobu, tituly) commonname_max = 64 emailaddress = E-mailova adresa emailaddress_max = 64 [ v3_req ]
# 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] [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 elektronického podpisu zaměstnance pro elektronické značky organizace Certifikát pro elektronického podpisu fyzické osoby elektronické značky fyzické osoby nepovinná Adresa - - nepovinná Jméno povinná povinná - - organizace a IČ *) *) Organizační nepovinná nepovinná - - jednotka Číslo - - - zaměstnance Jméno certifikátu - jméno a - jméno a příjmení příjmení Emailová adresa nepovinná nepovinná nepovinná *) formát položky je: jméno_organizace [IČ příslušné_ič], tedy například ABC software, s.r.o. [IČ 12345678] nepovinná
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/emailAddress=petr.kroupa@abc.cz" -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 [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] [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í.