Sdílet prostřednictvím


Práce s certifikáty

K programování zabezpečení technologie Windows Communication Foundation (WCF) se digitální certifikáty X.509 běžně používají k ověřování klientů a serverů, šifrování a digitální podepisování zpráv. Toto téma stručně vysvětluje funkce digitálních certifikátů X.509 a jejich použití ve WCF a obsahuje odkazy na témata, která tyto koncepty dále vysvětlují nebo ukazují, jak provádět běžné úlohy pomocí WCF a certifikátů.

Stručně řečeno, digitální certifikát je součástí infrastruktury veřejných klíčů (PKI), což je systém digitálních certifikátů, certifikačních autorit a dalších registračních autorit, které ověřují a ověřují platnost každé strany zapojené do elektronické transakce prostřednictvím použití kryptografie veřejného klíče. Certifikační autorita vydává certifikáty a každý certifikát má sadu polí obsahujících data, jako je subjekt (entita, pro kterou je certifikát vystaven), data platnosti (pokud je certifikát platný), vystavitel (entita, která certifikát vydala) a veřejný klíč. Ve WCF se každá z těchto vlastností zpracovává jako Claima každá deklarace identity je dále rozdělena do dvou typů: identita a práva. Další informace o certifikátech X.509 naleznete v tématu Certifikáty veřejného klíče X.509. Další informace o deklarací identity a autorizaci ve wcf naleznete v tématu Správa deklarací identity a autorizace pomocí modelu identit. Další informace o implementaci infrastruktury veřejných klíčů najdete v tématu Podniková infrastruktura veřejných klíčů s Windows Serverem 2012 R2 Active Directory Certificate Services.

Primární funkcí certifikátu je ověření identity vlastníka certifikátu ostatním. Certifikát obsahuje veřejný klíč vlastníka, zatímco vlastník si privátní klíč zachová. Veřejný klíč lze použít k šifrování zpráv odesílaných vlastníkovi certifikátu. K privátnímu klíči má přístup jenom vlastník, takže tyto zprávy může dešifrovat jenom vlastník.

Certifikáty musí vydat certifikační autorita, což je často vystavitel certifikátů třetí strany. V doméně Windows je součástí certifikační autority, která se dá použít k vydávání certifikátů počítačům v doméně.

Zobrazení certifikátů

Pro práci s certifikáty je často nutné je zobrazit a prozkoumat jejich vlastnosti. To se dá snadno provést pomocí modulu snap-in konzoly MMC (Microsoft Management Console). Další informace naleznete v tématu Postupy: Zobrazení certifikátů pomocí modulu snap-in konzoly MMC.

Úložiště certifikátů

Certifikáty se nacházejí v úložištích. Existují dvě hlavní umístění úložiště, která jsou dále rozdělena do dílčích úložišť. Pokud jste správcem počítače, můžete zobrazit obě hlavní úložiště pomocí nástroje snap-in konzoly MMC. Nesprávci můžou zobrazit jenom aktuální úložiště uživatelů.

  • Místní úložiště počítačů. Obsahuje certifikáty, ke které mají přístup procesy počítače, například ASP.NET. Toto umístění slouží k ukládání certifikátů, které ověřují server klientům.

  • Aktuální úložiště uživatelů. Interaktivní aplikace obvykle umisťuje certifikáty pro aktuálního uživatele počítače. Pokud vytváříte klientskou aplikaci, obvykle umístíte certifikáty, které ověřují uživatele ve službě.

Tyto dvě obchody jsou dále rozděleny do dílčích obchodů. Mezi nejdůležitější z nich při programování pomocí WCF patří:

  • Důvěryhodné kořenové certifikační autority. Certifikáty v tomto úložišti můžete použít k vytvoření řetězce certifikátů, který lze v tomto úložišti vysledovat zpět k certifikátu certifikační autority.

    Důležité

    Místní počítač implicitně důvěřuje všem certifikátům umístěným v tomto úložišti, i když certifikát nepochází z důvěryhodné certifikační autority třetí strany. Z tohoto důvodu neumisťujte do tohoto úložiště žádný certifikát, pokud vystavitele plně nedůvěřujete a pochopíte důsledky.

  • Osobní. Toto úložiště se používá pro certifikáty přidružené k uživateli počítače. Toto úložiště se obvykle používá pro certifikáty vydané jedním z certifikátů certifikační autority nalezených v úložišti důvěryhodných kořenových certifikačních autorit. Případně může být certifikát, který zde najdete, vystavený samostatně a důvěryhodná aplikací.

Další informace o úložištích certifikátů najdete v tématu Úložiště certifikátů.

Vyberte obchod.

Výběr umístění pro uložení certifikátu závisí na tom, jak a kdy služba nebo klient běží. Platí následující obecná pravidla:

  • Pokud je služba WCF hostovaná ve službě Systému Windows, použijte úložiště místního počítače . Upozorňujeme, že oprávnění správce jsou nutná k instalaci certifikátů do úložiště místního počítače.

  • Pokud je služba nebo klient aplikace, která běží pod uživatelským účtem, použijte aktuální úložiště uživatelů .

Úložiště accessu

Úložiště jsou chráněná seznamy řízení přístupu (ACL), stejně jako složky v počítači. Při vytváření služby hostované službou Internetová informační služba (IIS) se proces ASP.NET spustí v rámci účtu ASP.NET. Tento účet musí mít přístup k úložišti, které obsahuje certifikáty, které služba používá. Každá z hlavních úložišť je chráněna výchozím přístupovým seznamem, ale seznamy je možné upravit. Pokud pro přístup k úložišti vytvoříte samostatnou roli, musíte mu udělit oprávnění pro přístup k této roli. Informace o tom, jak upravit přístupový seznam pomocí nástroje WinHttpCertConfig.exe, najdete v tématu Postupy: Vytvoření dočasných certifikátů pro použití během vývoje.

Řetězení důvěryhodnosti a certifikačních autorit

Certifikáty se vytvářejí v hierarchii, kde každý jednotlivý certifikát je propojený s certifikační autoritou, která certifikát vydala. Tento odkaz je na certifikát certifikační autority. Certifikát certifikační autority pak odkazuje na certifikační autoritu, která vydala původní certifikát certifikační autority. Tento proces se opakuje až do dosažení certifikátu kořenové certifikační autority. Certifikát kořenové certifikační autority je ze své podstaty důvěryhodný.

Digitální certifikáty se používají k ověření entity tím, že se spoléhají na tuto hierarchii, označovanou také jako řetěz důvěryhodnosti. Řetězec libovolného certifikátu můžete zobrazit pomocí modulu snap-in konzoly MMC poklikáním na libovolný certifikát a následným kliknutím na kartu Cesta k certifikátu. Další informace o importu řetězů certifikátů pro certifikační autoritu naleznete v tématu Postupy: Určení řetězu certifikátů certifikační autority použité k ověření podpisů.

Poznámka:

Každý vystavitel může být označen důvěryhodnou kořenovou autoritou umístěním certifikátu vystavitele do úložiště certifikátů důvěryhodné kořenové autority.

Zakázání vztahu důvěryhodnosti řetězu

Při vytváření nové služby můžete použít certifikát, který není vystavený důvěryhodným kořenovým certifikátem, nebo samotný vydávající certifikát nemusí být v úložišti důvěryhodných kořenových certifikačních autorit. Pouze pro účely vývoje můžete dočasně zakázat mechanismus, který kontroluje řetěz důvěryhodnosti certifikátu. Chcete-li to provést, nastavte CertificateValidationMode vlastnost buď nebo PeerTrustPeerOrChainTrust. Buď režim určuje, že certifikát může být vystavený svým držitelem (partnerský vztah důvěryhodnosti) nebo součástí řetězu důvěryhodnosti. Vlastnost můžete nastavit u některé z následujících tříd.

Třída Vlastnost
X509ClientCertificateAuthentication X509ClientCertificateAuthentication.CertificateValidationMode
X509PeerCertificateAuthentication X509PeerCertificateAuthentication.CertificateValidationMode
X509ServiceCertificateAuthentication X509ServiceCertificateAuthentication.CertificateValidationMode
IssuedTokenServiceCredential IssuedTokenServiceCredential.CertificateValidationMode

Vlastnost můžete také nastavit pomocí konfigurace. K určení režimu ověřování se používají následující prvky:

Vlastní ověřování

Tato CertificateValidationMode vlastnost také umožňuje přizpůsobit způsob ověřování certifikátů. Ve výchozím nastavení je úroveň nastavena na ChainTrust. Chcete-li použít Custom hodnotu, musíte také nastavit CustomCertificateValidatorType atribut na sestavení a typ použitý k ověření certifikátu. Chcete-li vytvořit vlastní validátor, musíte dědit z abstraktní X509CertificateValidator třídy.

Při vytváření vlastního ověřovacího objektu je nejdůležitější metodou přepsání Validate . Příklad vlastního ověřování najdete v ukázce validátoru certifikátu X.509. Další informace najdete v tématu Vlastní přihlašovací údaje a ověřování přihlašovacích údajů.

Vytvoření řetězu certifikátů pomocí rutiny New-SelfSignedCertificate v PowerShellu

Rutina New-SelfSignedCertificate v PowerShellu vytvoří certifikáty X.509 a páry privátního klíče nebo veřejného klíče. Privátní klíč můžete uložit na disk a pak ho použít k vydávání a podepisování nových certifikátů, čímž simulujete hierarchii zřetězených certifikátů. Rutina je určená pouze jako pomůcka při vývoji služeb a nikdy by se neměla používat k vytváření certifikátů pro skutečné nasazení. Při vývoji služby WCF pomocí následujících kroků sestavte řetěz důvěryhodnosti pomocí rutiny New-SelfSignedCertificate.

  1. Vytvořte dočasný kořenový certifikát (podepsaný svým držitelem) pomocí rutiny New-SelfSignedCertificate. Uložte privátní klíč na disk.

  2. Nový certifikát použijte k vydání jiného certifikátu, který obsahuje veřejný klíč.

  3. Importujte kořenový certifikát autority do úložiště důvěryhodných kořenových certifikačních autorit.

  4. Podrobné pokyny najdete v tématu Postupy: Vytvoření dočasných certifikátů pro použití během vývoje.

Který certifikát použít?

Běžné dotazy týkající se certifikátů jsou certifikáty, které se mají použít, a proč. Odpověď závisí na tom, jestli programujete klienta nebo službu. Následující informace poskytují obecné pokyny a nejsou vyčerpávající odpovědí na tyto otázky.

Certifikáty služeb

Certifikáty služeb mají primární úlohu ověřování serveru u klientů. Jednou z počátečních kontrol, kdy klient ověří server, je porovnat hodnotu pole Předmět s identifikátorem URI (Uniform Resource Identifier) použitým ke kontaktování služby: DNS obou musí odpovídat. Pokud je například identifikátor URI služby http://www.contoso.com/endpoint/ , musí pole Předmět obsahovat také hodnotu www.contoso.com.

Všimněte si, že pole může obsahovat několik hodnot, z nichž každá má předponu inicializace označující hodnotu. Inicializace je nejčastěji "CN" pro běžný název, CN = www.contoso.comnapříklad . Pole Předmět může být také prázdné, v takovém případě pole Alternativní název subjektu může obsahovat hodnotu NÁZEV DNS.

Všimněte si také, že hodnota pole Zamýšlený účel certifikátu by měla obsahovat odpovídající hodnotu, například Ověřování serveru nebo Ověřování klienta.

Klientské certifikáty

Klientské certifikáty obvykle nevystavuje certifikační autorita třetí strany. Místo toho osobní úložiště aktuálního umístění uživatele obvykle obsahuje certifikáty umístěné v kořenové autoritě s zamýšleným účelem ověřování klienta. Klient může takový certifikát použít, pokud je vyžadováno vzájemné ověřování.

Online odvolání a offline odvolání

Platnost certifikátu

Každý certifikát je platný pouze pro dané časové období, označované jako období platnosti. Doba platnosti je definována polem Platné od a Platné do polí certifikátu X.509. Během ověřování se certifikát kontroluje a zjišťuje, jestli je certifikát stále v době platnosti.

Seznam odvolaných certifikátů

Certifikační autorita může kdykoli během doby platnosti odvolat certifikát. K tomu může dojít z mnoha důvodů, jako je například ohrožení privátního klíče certifikátu.

Pokud k tomu dojde, všechny řetězy sestupné z odvolaných certifikátů jsou také neplatné a nejsou důvěryhodné během ověřovacích postupů. Pokud chcete zjistit, které certifikáty jsou odvolané, každý vystavitel publikuje seznam odvolaných certifikátů s časovým razítkem a seznam odvolaných certifikátů (CRL). Seznam lze zkontrolovat pomocí online odvolání nebo offline odvolání nastavením RevocationMode nebo DefaultRevocationMode vlastnosti následujících tříd na jednu z hodnot výčtu X509RevocationMode : X509ClientCertificateAuthentication, X509PeerCertificateAuthentication, X509ServiceCertificateAuthenticationa IssuedTokenServiceCredential třídy. Výchozí hodnota pro všechny vlastnosti je Online.

Režim v konfiguraci můžete také nastavit pomocí revocationMode atributu <ověřování> (<serviceBehaviors) i< ověřování> (koncového< boduBehaviors).>>

Metoda SetCertificate

Ve WCF musíte často zadat certifikát nebo sadu certifikátů, které služba nebo klient používá k ověřování, šifrování nebo digitálnímu podepsání zprávy. Můžete to provést programově pomocí SetCertificate metody různých tříd, které představují certifikáty X.509. Následující třídy používají metodu SetCertificate k určení certifikátu.

Třída metoda
PeerCredential SetCertificate
X509CertificateInitiatorClientCredential SetCertificate
X509CertificateRecipientServiceCredential SetCertificate
X509CertificateInitiatorServiceCredential
SetCertificate

Metoda SetCertificate funguje tak, že navrhne umístění úložiště a úložiště, typ "find" (x509FindType parametr), který určuje pole certifikátu a hodnotu, která se má v poli najít. Například následující kód vytvoří ServiceHost instanci a nastaví certifikát služby použitý k ověření služby klientům SetCertificate pomocí metody.

Uri baseAddress = new Uri("http://cohowinery.com/services");
ServiceHost sh = new ServiceHost(typeof(CalculatorService), baseAddress );
sh.Credentials.ServiceCertificate.SetCertificate(
StoreLocation.LocalMachine, StoreName.My,
X509FindType.FindBySubjectName, "cohowinery.com");
Dim baseAddress As New Uri("http://cohowinery.com/services")
Dim sh As New ServiceHost(GetType(CalculatorService), baseAddress)
sh.Credentials.ServiceCertificate.SetCertificate( _
StoreLocation.LocalMachine, StoreName.My, _
X509FindType.FindBySubjectName, "cohowinery.com")

Více certifikátů se stejnou hodnotou

Úložiště může obsahovat více certifikátů se stejným názvem subjektu. To znamená, že pokud určíte, že x509FindType je FindBySubjectName nebo FindBySubjectDistinguishedNamea více než jeden certifikát má stejnou hodnotu, vyvolá se výjimka, protože neexistuje způsob, jak rozlišit, který certifikát je povinný. Můžete to zmírnit nastavením x509FindType možnosti FindByThumbprint. Pole kryptografického otisku obsahuje jedinečnou hodnotu, kterou lze použít k vyhledání konkrétního certifikátu v úložišti. To má však vlastní nevýhodu: pokud je certifikát odvolán nebo obnoven, metoda selže, SetCertificate protože kryptografický otisk je také pryč. Pokud už certifikát není platný, ověřování se nezdaří. Způsobem, jak to zmírnit, je nastavit x590FindType parametr na FindByIssuerName název vystavitele a zadat ho. Pokud není požadován žádný konkrétní vystavitel, můžete také nastavit jednu z ostatních X509FindType hodnot výčtu, například FindByTimeValid.

Certifikáty v konfiguraci

Certifikáty můžete také nastavit pomocí konfigurace. Pokud vytváříte službu, přihlašovací údaje, včetně certifikátů, se zadají v rámci službyBehaviors>.< Při programování klienta se certifikáty zadají v rámci koncového <boduBehaviors>.

Mapování certifikátu na uživatelský účet

Funkce služby IIS a Active Directory je schopnost mapovat certifikát na uživatelský účet systému Windows. Další informace o této funkci najdete v tématu Mapování certifikátů na uživatelské účty.

Další informace o použití mapování služby Active Directory naleznete v tématu Mapování klientských certifikátů pomocí mapování adresářové služby.

Pokud je tato funkce povolená, můžete vlastnost třídy X509ClientCertificateAuthentication nastavit MapClientCertificateToWindowsAccount na true. V konfiguraci můžete nastavit mapClientCertificateToWindowsAccount atribut ověřovacího><prvku na true, jak je znázorněno v následujícím kódu.

<serviceBehaviors>
 <behavior name="MappingBehavior">
  <serviceCredentials>
   <clientCertificate>
    <authentication certificateValidationMode="None" mapClientCertificateToWindowsAccount="true" />
   </clientCertificate>
  </serviceCredentials>
 </behavior>
</serviceBehaviors>

Mapování certifikátu X.509 na token, který představuje uživatelský účet systému Windows, se považuje za zvýšení oprávnění, protože po namapování lze token Windows použít k získání přístupu k chráněným prostředkům. Proto zásady domény před mapováním vyžadují, aby certifikát X.509 odpovídal jeho zásadám. Tento požadavek vynucuje balíček zabezpečení SChannel .

Při použití rozhraní .NET Framework 3.5 nebo novějších verzí WCF zajistí, že certifikát odpovídá zásadám domény, než se namapuje na účet Systému Windows.

V první verzi WCF se mapování provádí bez konzultace se zásadami domény. Proto je možné, že starší aplikace, které fungovaly při spuštění v první verzi, selže, pokud je mapování povolené a certifikát X.509 nevyhovuje zásadám domény.

Viz také