Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > Posts > Změna CSP/KSP poskytovatele v existujícím PFX souboru
říjen 05
Změna CSP/KSP poskytovatele v existujícím PFX souboru

Když exportujete certifikát i s jeho soukromým klíčem (private key) tak vytváříte PFX soubor (neboli PKCS12 formát souboru, někdy také přípona P12). Problém na Windows je ten, že tento soubor obsahuje navíc jedno políčko (rozšíření, extension) s názvem kryptografického poskytovatele (cryptographic provider), který daný privátní klíč zrovna spravuje a v němž byl původně uložen.

Poskytovatel je buď tzv. starší CSP (cryptographic services provider), nebo tzv. novější CNG/KSP (cryptography next generation, key storage provider). Jaké všechny takové poskytovatele na počítači máte zjistíte jednoduše pomocí certutil -csplist. Z daného PFX souboru tuto informaci dostanete pomocí certutil -dump.

Soubor PFX je tím pádem na dále vázán na tohoto poskytovatele. Je možné, že na cílovém stroji takový poskytovatel neexistuje. Nebo aplikace, pro kterou certifikát instalujete, neumí právě toho původního použít, i když by byl na počítači k dispozici (viz. velká ne-podpora v mnoha moderních programech).

Název poskytovatele je v souboru uložen jen jako prostý text. Není k tomu nic vázáno, takže pokud je potřeba ho změnit, stačí nějak upravit jeho hodnotu. Samozřejmě by mohly být problémy s importem, pokud byste se snažili dostat do poskytovatele třeba delší privátní klíč, než by on sám uměl, ale to je málo pravděpodobné, běžné certifikáty umí většina z nich.

K úpravě potřebujete ale openssl, protože zabudovaný certutil to neumí. Openssl stáhnete někde na internetu. No a potom už jenom použijete PowerShell:

$pwd = 'Pa$$w0rd'
$openSsl = 'C:\OpenSSL-Win32\bin\openssl.exe'
$pfx = 'C:\ONDRA\pfx-with-wrong-csp-to-replace.pfx'

$newCSP = 'Microsoft Enhanced RSA and AES Cryptographic Provider'

$pem = [IO.Path]::ChangeExtension($pfx, '.pem')
$newPfx = [IO.Path]::ChangeExtension($pfx, '.newCSP.pfx')

Write-Host ('Original PFX file: {0}' -f $pfx) -Fore Green
certutil -dump -p $pwd $pfx

& $openssl pkcs12 -in $pfx -out $pem -passin "pass:$pwd" -passout "pass:$pwd"

& $openssl pkcs12 -export -in $pem -out $newPfx -CSP $newCSP -passin "pass:$pwd" -passout "pass:$pwd"

Write-Host ('New PFX file: {0}' -f $newPfx) -Fore Green
certutil -dump -p $pwd $newPfx

Comments

There are no comments for this post.

Add Comment

Title


Pole Title nemusíte vyplňovat, doplní se to samo na stejnou hodnotu jako je nadpis článku.

Author *


Pole Author nesmí být stejné jako pole Title! Mám to tu jako ochranu proti spamu. Roboti to nevyplní dobře :-)

Body *


Type number two as digit *


Semhle vyplňte číslici dvě. Předchozí antispemové pole nefunguje úplně dokonale, zdá se, že jsou i spamery, které pochopily, že je občas potřeba vyplnit autora :-)

Email


Emailová adresa, pokud na ni chcete ode mě dostat odpověď. Nikdo jiný než já vaši emailovou adresu neuvidí.

Attachments