Konfigurace certifikátu pro podpis či pečeť
Podepisovat či pečetit dokument certifikátem uloženým lokálně v PEM souboru, v systémovém úložišti Windows cert store, na čipové kartě vložené v Hardware Security Modulu (HSM), případně na kvalifikovaném prostředku (tokenu), lze pomocí metody ConvertFileEx
. K identifikaci a použití certifikátů touto metodou je zapotřebí mít nastavené parametry CertificateID
a PrivateKeyPIN
.
Windows certificate store
Certifikát musí být instalovaný ve Windows certificate store. Nainstalujete ho jedním z těchto způsobů:
-
Dvojklikem na PFX/P12 soubor.
-
Přes Microsoft Management Console (nabídka
).
Instalace certifikátu
Při instalaci certifikátu se v obou případech vybírá umístění, kam se certifikát má nainstalovat. Výchozí volbou je Aktuální uživatel, případně Můj uživatelský účet, ale nabízí se také Místní počítač, případně Účet počítače. Vzhledem k tomu, že aplikační pool LTD v IIS běží pod konkrétním účtem, je důležité, aby daný účet měl k instalovanému certifikátu přístup. Z tohoto důvodu se doporučuje instalovat pro Místní počítač, případně Účet počítače.
Po instalaci certifikátu do úložiště Windows certificate store (pro Místní počítač nebo Účet počítače) je dále nutné nastavit oprávnění. To opět nastavíte v mmc.exe konzoli (stejný postup jako výše), kde v okně otevřeném:
je třeba tlačítkem Přidat vložit nového uživatele a tomu nastavit oprávnění Úplné řízení a Čtení.
Identifikace certifikátu
Identifikace certifikátu ve volání metody ConvertFileEx se pak nastaví takto:
urn:hex:<hexadecimalne_kodovany_sha1_hash>
nebo
urn:sha:<base64_kodovany_sha1_hash>
Hash certifikátu lze zjistit z vlastností instalovaného certifikátu, např. přes
.Známé problémy
Může se stát, že je certifikát instalován podle výše uvedeného postupu, ale podpis se nedaří a vrací se odpověď:
<ConvertFileExResult>37</ConvertFileExResult> <ErrorMessage>DigitalSignature error 0x80090008 (Create signature error 0x80090008 (Byl zadán neplatný algoritmus))</ErrorMessage>
Pak je třeba postupovat takto:
-
Smazat instalovaný certifikát.
-
Spustit CMD jako admin (přes pravé tlačítko Spustit jako Správce).
-
Zadat:
certutil -csp "Microsoft Enhanced RSA and AES Cryptographic Provider" -importpfx My <cesta_k_pfx>
-
Zadat heslo k pfx, tím by mělo dojít k importu.
-
Je dobré ověřit, zda má certifikát nastaveného zvoleného providera, a to přes CMD pomocí:
certutil -v -store My 0D9662863FD5047CE3EEDA1FA74A3F0580F3114D > C:\logs\certutil-list.txt
Kde 0D9662863FD5047CE3EEDA1FA74A3F0580F3114D je kryptografický otisk (sha1 hash) certifikátu.
-
Funkčnost ověřte přes nové volání (SoapUI), kdy zkusíte podepsat daným certifikátem.
Lokální kvalifikovaný prostředek (HSM)
Před prvním použitím metody je nutné upravit cestu k PKCS#11 modulu (knihovnám zařízení), kterou zjistíte v dokumentaci příslušného zařízení.
Cesta k modulu se upravuje v konfiguračním a spouštěcím dávkovém souboru
InstallDir\Engine\Misc\Configure_PKCS11.bat
V konfiguračním souboru je přednastavena výchozí cesta ke knihovnám podporovaného HSM od Thales nShield. Po nastavení odpovídající cesty ke knihovnám vašeho zařízení dávkový soubor spusťte.
Identifikace certifikátu
Ve volání metody ConvertFileEx
a parametru CertificateID
je možné identifikovat certifikát způsobem:
PKCS11:alias:<alias_certifikatu>
nebo
PK11:alias:<alias_certifikatu>
Pro rychlejší identifikaci certifikátu je možné za PKCS11 resp. PK11 přidat specifikaci softkarty:
KCS11:card:<nazev_sofktarty>;alias:<alias_certifikatu>
nebo
PK11:card:<nazev_sofktarty>;alias:<alias_certifikatu>
Vyhledání certifikátu přes PK11 by mělo být nejrychlejší možné řešení, protože se přímo komunikuje s PKCS11 knihovnou HSM zařízení, a ne přes NSS (Network Security Services).
Soubor/data (PEM)
Nejprve je nutné vytvořit PEM soubor z PFX/P12 souboru certifikátu. Postup najdete například zde.
Vzdálený kvalifikovaný prostředek (HSM)
Předpokladem pro toto použití je:
-
Uzavřená smlouva s Českou Poštou (klient x PostSignum)
-
Vytvořený přístup a prostor ve vzdáleném HSM (602)
-
Podepsaný souhlas o umístění soukromého klíče do HSM (klient x 602)
Certifikát lze využít pouze při konverzi souboru v metodě ConvertFileEx
.