Konverze PFX certifikátů

Zjistil jsem, že by nebylo špatné si připravit takový drobný manuálek na konverzi PFX certifikátu. Přeci jenom to člověk neprovádí každý den. Úvodem stručné vysvětlení pár pojmů.

PKCS#12 je přenosný formát k uložení a přenosu uživatelských či počítačových privátních a veřejných klíčů a certifikátů. Plné jméno je Public Key Cryptography Standards #12. Data jsou uložena v binárním tvaru. Tento formát je na Windows znám jako PFX soubor. Kdo aspoň jednou zálohoval či importoval již vytvořený certifikát, ví přesně, o co jde. Microsoft u PFX formátu uvádí název Personal Information Exchange. PFX je jediný formát, který je na Windows použitelný při exportu včetně privátního klíče.

PKCS#7 je další formát pro ukládání a přenos certifikátů. Plné jméno je Public Key Cryptography Standards #7, na Windows se používá binární formát s koncovkou P7B. PKCS#7 se na Windows nabízí při volbě exportu certifikátu bez privátního klíče. Vedle tohoto formátu se nabízí ještě DER encoded binary X.509 a Base-64 encoded X.509. Base-64 uložený s koncovkou .CER je ekvivalentní definici DER, která je uvedena níže. Trochu zmatek.

Při použití interní certifikační autority není problém o certifikát zažádat (CSR), následně si stáhnout vydaný certifikát a spárovat jej s privátním klíčem. Není také problém jej zazálohovat do PFX souboru – zde snad jediná drobnost – zálohu je fakt dobré učinit včetně privátního klíče, použít k zašifrování PFX silné heslo, toto pak nezapomenout a zálohu uložit na bezpečné místo.

Jsou případy, kdy je zapotřebí PFX převést do jiného formátu. Softy třetích stran často vyžadují formát PEM, specialitou Java aplikací je JKS. V poslední době jsem převáděl PFX do tvaru použitelného Apache serverem a nyní potřebuji vytvořit formát, který bude akceptovatelný FileZilla serverem.

PEM je zkratka pro Privacy Enhanced Mail format, může obsahovat privátní klíče (RSA i DSA), veřejné klíče (RSA i DSA) a x509 certifikáty. Data jsou uložena v Base64-encoded DER formátu a jsou uvedena ASCII hlavičkami, takže je lze bez problémů převádět v textovém módu mezi různými systémy (OS).

DER je zkratka pro Distinguished Encoding Rules formát, který může taktéž obsahovat privátní a veřejné klíče a certifikáty. Nejpoužívanější je právě v prohlížečích. Jako úložiště je použit ASN1 DER formát. Zatímco PEM používal textové hlavičky, DER je nemá. Z uvedeného je patrné, že PEM = hlavičky + DER.

Pro převod PFX do PEM je zapotřebí nainstalovat OpenSSL. Již zkompilované binární instalačky pro Windows jsou zde - http://www.slproweb.com/products/Win32OpenSSL.html. Poté je v příkazové řádce potřeba zadat následující příkaz (doplněný o správné cesty):

openssl pkcs12 –in certifikat.pfx –out certifikat.pem –nodes

Objeví se výzva k zadání hesla, jež bylo použito při zálohování certifikátu do PFX souboru. Při vyplňování hesla rozhodně nedoporučuji zkoušet CTRL+C, CTRL+V, nikdy mi to nešlo. Vždy jsem musel heslo pečlivě vyťukat přímo na klávesnici. Výsledkem je soubor, který obsahuje privátní a veřejný klíč, každý uvedený ASCII hlavičkou. Pokud byla při zálohování do PFX zaškrtnuta i volba, že se má exportovat root certifikát, event. certifikáty intermediate CA, budou v PEMu uvedeny také.

Privátní klíč je tak uveden mezi řádky
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----

Vlastní certifikát je pak mezi řádky
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

Pořadí jednotlivých částí v PEMu je následující:

1) privátní klíč (RSA PRIVATE KEY)
2) vlastní certifikát založený na veřejném klíči (první CERTIFICATE sekce)
3) root certifikát vydávající CA (druhá CERTIFICATE sekce)
4) certifikáty podřízených (intermediate) CA (třetí a další CERTIFICATE sekce)

Pokud bych potřeboval někomu předat pouze certifikát s veřejným klíčem ve formátu PEM, mám dvě možnosti. Buď si postupně ve Windows vyexportuji jednotlivé certifikáty do Base-64 encoded X.509 souborů s koncovkou .CER a následně je spojím textovým editorem, nebo využiji již popsané konverze z PFX na PEM a v posledním kroku v textovém editoru upravím obsah souboru PEM tak, aby byla ODSTRANĚNA sekce RSA PRIVATE KEY a pořadí dalších částí bylo následující:

1) vlastní certifikát založený na veřejném klíči (první CERTIFICATE sekce v původním souboru)
2) certifikáty podřízených (intermediate) CA (třetí a další CERTIFICATE sekce v původním souboru)
3) root certifikát vydávající CA (druhá CERTIFICATE sekce v původním souboru)

Pro rozchození certifikátu z interní CA stačí zkonvertovat existující PFX do PEM souboru, ten nahrát na server do adresáře, na který má min. právo čtení služba, pod kterou běží FileZilla server a přenastavit konfiguraci FileZilly tak, aby Private key file a Certificate file ukazovaly na nahraný PEM soubor.

Odkazy na další zdroje:
http://www.sslshopper.com/article-most-common-openssl-commands.html
http://acs.lbl.gov/~ksb/Scratch/openssl.html
http://shib.kuleuven.be/docs/ssl_commands.shtml
http://www.xenocafe.com/tutorials/linux/centos/openssl/self_signed_certificates/index.php

Zobrazit komentáře