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