Problém
Podpora SHA-2, ECC (Elliptic Curve Cryptography) a Certificate Templates v3 ve Windows. Obecně řečno, Windows XP částečně podporují SHA-2, pro Windows Server 2003 si potřebujete vyžádat aktualizaci. Ani Windows XP ani Windows Server 2003 neumí ECC ani používat certifikátové šablony verze 3.
Úložiště klíčů a kryptografické algoritmy
Ve Windows potřebujete obvykle nějakou knihovnu nebo sadu knihoven (API), aby aplikace mohly používat nějakou funkcionalitu. Ani šifrování není výjimkou. Windows vám dávají sadu různých knihoven, které mohou aplikace použít k tomu, aby šifrovaly a dešifrovaly, podepisovaly a ověřovaly podpisy a celé vztahy důvěry. Tyto knihovny se nazývají Cryptographic Services Provider (CSP) a Cryptography Next Generation (CNG, neboli Key Storage Provider KSP) a já jim budu pro jednoduchost v dalším říkat poskytovatelé (provider). Každý program umí používat jednu, nebo více různých knihoven, vždycky ale ví přesně které, takže některé z nich prostě používat nemusí umět. CNG je k dispozici až od verze Windows Vista, takže ho mnoho programů neumí používat.
Poskytovatel dělá dvě věci:
- umí různé algoritmy, jak symetrické jako je AES, RC4 nebo DES, tak i hešhovací jako je SHA-1, různé SHA-2 a různé MD5 nebo MD4 atd. Poskytovatel také samozřejmě umí mnohdy nějaké asymetrické algoritmy jako je RSA, DSA nebo D-H. Poskytovatelé umí také ověřovat platnost certifikátových řetězců, autorit a umí kontrolovat i CRL a případně OCSP.
- ukládají privátní klíče a certifikáty. Pokud máte svůj nějaký certifikát s privátním klíčem, musí být vždycky uložen pomocí nějakého poskytovatele. Vždycky pomocí nějakého konkrétního poskytovatele. Jen pro úplnost, je možné, aby klíč nebo certifikát byl uložen ve více poskytovatelích. Tahle informace se vždycky ví a mohli byste si to zobrazit pomocí CERTUTIL -v -verifystore. Jen GUI to jako vždy nezobrazuje. Poskytovatel, který daný klíč ukládá, ho může používat pro šifrování. Ostatní poskytovatelé takový klíč použít nemohou.
Z toho tedy plyne i důležitost aplikační podpory. Jestliže máte privátní klíč v poskytovateli, kterého váš program neumí použít, tak ta aplikace s ním prostě šifrovat nebude, i když ho nakrásně vidíte v GUIčku.
CNG a CSP
Windows Vista (vydáno v roce 2006) a novější systémy podporují nové kryptografické knihovny pro práci s certifikáty a ukládání jejich privátních klíčů. Balík tohoto API se nazývá Cryptography Next Generation (CNG). Mělo by to postupně nahradit dřívější knihovny zvané Cryptographic Services Provider (CSP). Důvody, proč by někdo chtěl používat novější CNG jsou cca dva. Je to flexibilnější a umožňuje to, aby výrobci různých čipových karet, nebo vlastních algoritmů dodali jenom zásuvný modul a nemuseli vyvýjet složitě plnohodnotné CSP. Druhý důvod je podpora algoritmů eliptických křivek (Elliptic Curves Cryptography - ECC), tedy nejnovější kryptografie, kterou byste mohli chtít výhledově (a to sakra výhledově, nejdřív to taky musí někdo podporovat) používat.
Upozorňuju, že SHA-2 umí jak CNG knihovny, tak i starší CSP. Například na Windows XP ani CNG nemáte, ale když si nainstalujete Service Pack 3, tak se vám zaaktualizují některé starší CSP knihovny.
Pokud chcete, můžete se podívat na seznam poskytovatelů, které máte na počítači.
CERTUTIL -csplist
nebo i se seznamem algoritmů
CERTUTIL -v -csplist
V předchozím výpisu uvidíte všechny CSP i CNG dohromady. Poslední dva, tedy Microsoft Software Key Storage Provider a Microsoft Smart Card Key Storage Provider jsou CNG, zbytek je CSP. Pozná se to taky tak, že u novějších CNG není políčko Provider Type.
Certificate Templates v3
Jak to poznám, co používám? Jde to nějak vybrat? Ano, jde. Existuje k tomu několik podmínek:
- Vydávám certifikáty pomocí Certificate Template v3 - pokud máte Windows Server 2008 a novější CA (AD CS), tak můžete vydávat certifikáty na základě šablony certifikátů verze 3 (je u toho napsáno Windows Server 2008). Pokud to takto uděláte, certifikát se vydá do CNG. Pokud použijete starší typ šablony, tedy verzi 2 (Certificate Template v2 - Windows Server 2003) nebo verzi číslo 1 (Certificate Template v1 - Windows 2000), tak se na klientovi použije CSP.
- Importuju certifikát z PFX, CRT nebo CER souboru - certifikátové GUIčko je jako obvykle velmi příjemné, takže si vybere samo a vám o tom nic neřekne. Pokud byste ale použili CERTUTIL -importpfx, tak si můžete zadat do kterého poskytovatele to chcete naimportovat pomocí parametru -csp. Trošku divně tady máte parametr -csp, ale pokud mu zadáte Microsoft Software Key Storage Provider, nebo Microsoft Smart Card Key Storage Provider.
- Aplikace vám řekne, co potřebuje - pokud je aplikace slušná, v dokumentaci uvádí, které poskytovatele umí používat. Obvykle žádná aplikace služná není.
Pozor, pokud vyexportujete PFX soubor, uvnitř je napsáno jméno poskytovatele, ze kterého jste to vyndali. Když to budete chtít importovat na počítači, kde takový poskytovatel není, tak to nepůjde pomocí GUI. Můžete zkusit příkazovou řádku a CERTUTIL -importpfx, ale ani to nemusí fungovat, jestliže cílový poskytovatel nerozumí algoritmům použitým v certifikátu.
Aplikační podpora
Obvyklé programy pracují s CSP. Pouze některé novější programy někdy pracují i s CNG. Z toho plyne, jestliže nechcete mít problémy, obecně nevydávejte klíče do CNG. To znamená obecně nepoužívejte Certificate Template v3, protože ta to vydává vždycky pouze do CNG.
Takže následuje přehled programů, které CNG nepodporují. I když byste například certifikát web serveru viděli i s privátním klíčem přes GUI, následující programy ho prostě nepoužijí:
SQL Server |
SQL Server 2012 R2 a starší |
Forefront Threat Management Gateway |
TMG 2010 a ISA Server 2006 a starší |
System Center Configuration Manager |
SCCM 2012 Rx a starší |
System Center Operations Manager |
SCOM 2012 Rx a starší |
VPN, 802.1x pro Ethernet a WiFi (EAP client) ve Windows |
Windows 7 a Windows Server 2008 R2 a starší |
Kerberos DC certifikáty |
Windows Vista a Windows Server 2008 a starší |
Outlook |
Outlook 2003 a starší |
EFS |
Windows Vista a Windows Server 2008 a starší |
AD FS (ADFS, Active Directory Federation Services) a WAP (Web Application Proxy) |
Windows 2012 R2 a starší |
AD RMS (ADRMS, Active Directory Rights Management Services) |
Windows 2012 R2 a starší |
Nejhorší na tom je, že i když ty programy vidí certifikát - tzn. můžete ho obvykle vybrat v seznamu, stejně potom neumí použít jeho privátní klíč. Jaktože vidí ten certifikát? No protože ony certifikáty jsou uloženy obvykle zjednodušeně řečeno "ve více poskytovatelích", zatímco privátní klíče jen v jednom.