Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > Posts > Podpora CNG/KSP v aplikacích
srpen 22
Podpora CNG/KSP v aplikacích

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:

  1. 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.
  2. 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.
  3. 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í:

 

Aplikace Verze
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ší​
​Remote Desktop Services (RDP) ​​Windows Server 2003 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.

 

Comments

Re: Podpora CNG v aplikacích

jen pro doplnění, ani SQL Server 2012 neumí používat certifikáty uložené v CNG.
Na Windows 8/2012 je ale už EAP kliet upgradován tak, že umí používat CNG úložiště pro klientské certifikáty.
ondass on 30.4.2013 8:04

Re: Podpora CNG v aplikacích

anglická verze téhož, nicméně psaná dnes je k dispozici tu:
http://www.sevecek.com/EnglishPages/Lists/Posts/Post.aspx?ID=8
ondass on 30.4.2013 18:59

Re: Podpora CNG/KSP v aplikacích

ano, pro RDP certifikáty můžete používat CNG/KSP už od Windows 2008: https://www.sevecek.com/Lists/Posts/Post.aspx?ID=514
ondass on 7.8.2015 8:02

Add Comment

Sorry comments are disable due to the constant load of spam *


Omlouvám se, ale příval spamu nelze kontrolovat, takže mi prosím pošlete email, pokud máte nějaký dotaz, nebo připomínku.

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 *


Email


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

Attachments