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 Claim, a každé tvrzení je dále rozděleno do dvou typů: identita a právo. 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 zahrnuta certifikační autorita, 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. Jsou dvě hlavní obchodní místa, která jsou dále rozdělena do dílčích obchodů. 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 vystaviteli plně nedůvěřujete a nerozumíte důsledkům.

  • 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é certifikační autoritou, které se nacházejí 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ě přístupů

Ú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é internetovou informační službou (IIS) se proces ASP.NET spouští pod účtem 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ěz důvěry a certifikační autority

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ázat řetěz důvěry

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 vlastnost CertificateValidationMode buď na PeerTrust nebo PeerOrChainTrust. Buď režim určuje, že certifikát může být vystavený svým držitelem (důvěra mezi rovnocennými) nebo být součástí řetězce důvěryhodnosti. Vlastnost můžete nastavit u některé z následujících tříd.

Třída Vlastnictví
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 hodnotu Custom, je nutné také nastavit atribut CustomCertificateValidatorType na sestavení a typ, který se používá 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ší přebít metodu 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 PowerShellu

Rutina New-SelfSignedCertificate 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ů. Cmdlet je určen pouze jako pomůcka při vývoji služeb a nikdy by neměl být používán k vytváření certifikátů pro skutečné nasazení. Při vývoji služby WCF použijte následující kroky k sestavení řetězu důvěryhodnosti s cmdletem New-SelfSignedCertificate.

  1. Pomocí rutiny New-SelfSignedCertificate vytvořte dočasný certifikát kořenové autority (podepsané svým držitelem). 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é otázky týkající se certifikátů zahrnují, které certifikáty 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. Naopak osobní úložiště aktuální uživatelské polohy obvykle obsahuje certifikáty umístěné kořenovou autoritou se 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í.

Odvolání online 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ů. Chcete-li zjistit, které certifikáty jsou odvolané, každý vystavitel publikuje časově i datově označený 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í> (z <serviceBehaviors>) a <ověřování> (z <koncového bodu behaviorů>).

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 určí umístění a samotné úložiště, typ "find" (x509FindType parametr), který určuje pole certifikátu, a hodnotu, kterou je třeba 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 na 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ůsob, jak to zmírnit, je nastavit parametr x590FindType na FindByIssuerName a zadat název vystavitele. 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í pod <endpointBehaviors>.

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 MapClientCertificateToWindowsAccount nastavit X509ClientCertificateAuthentication 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é