Verwenden von ZertifikatenWorking with Certificates

Zum Programmieren der WCF-Sicherheit (Windows Communication Foundation) werden häufig digitale X.509-Zertifikate zum Authentifizieren von Clients und Servern sowie zum Verschlüsseln und digitalen Signieren von Nachrichten verwendet.To program Windows Communication Foundation (WCF) security, X.509 digital certificates are commonly used to authenticate clients and servers, encrypt, and digitally sign messages. Dieser Artikel bietet einen Überblick über die Funktionen digitaler X.509-Zertifikate und ihre Verwendung in WCF und enthält Links zu Themen, in denen diese Konzepte näher beschrieben oder die Ausführung allgemeiner Aufgaben mit WCF und Zertifikaten erläutert werden.This topic briefly explains X.509 digital certificate features and how to use them in WCF, and includes links to topics that explain these concepts further or that show how to accomplish common tasks using WCF and certificates.

Digitale Zertifikate sind Teil einer Public Key-Infrastruktur (PKI). Dabei handelt es sich um ein System aus digitalen Zertifikaten, Zertifizierungsstellen und anderen Registrierungsstellen zur Überprüfung und Authentifizierung der Gültigkeit aller beteiligten Parteien in einer elektronischen Transaktion unter Verwendung der Public Key-Kryptografie.In brief, a digital certificate is a part of a public key infrastructure (PKI), which is a system of digital certificates, certificate authorities, and other registration authorities that verify and authenticate the validity of each party involved in an electronic transaction through the use of public key cryptography. Die Zertifikate werden von einer Zertifizierungsstelle ausgestellt, und jedes Zertifikat enthält eine Reihe von Feldern mit Daten, z.B. Antragsteller (die Entität, für die das Zertifikat ausgestellt wird), Gültigkeitsdatum (das Datum, bis zu dem das Zertifikat gültig ist), Aussteller (die Entität, von der das Zertifikat ausgestellt wurde) und öffentlicher Schlüssel.A certification authority issues certificates and each certificate has a set of fields that contain data, such as subject (the entity to which the certificate is issued), validity dates (when the certificate is valid), issuer (the entity that issued the certificate), and a public key. In WCF werden diese Eigenschaften als Claim verarbeitet, und jeder Anspruch wird weiter in zwei Typen unterteilt: Identität und Recht.In WCF, each of these properties is processed as a Claim, and each claim is further divided into two types: identity and right. Weitere Informationen zu X.509-Zertifikaten finden Sie unter X.509 Public Key Certificates (X.509-Zertifikate mit öffentlichem Schlüssel).For more information about X.509 certificates see X.509 Public Key Certificates. Weitere Informationen über Ansprüche und Autorisierung in WCF finden Sie unter Managing Claims and Authorization with the Identity Model (Verwalten von Ansprüchen und Autorisierung mit dem Identitätsmodell).For more information about Claims and Authorization in WCF see Managing Claims and Authorization with the Identity Model. Weitere Informationen zur Implementierung einer PKI finden Sie unter Windows Server 2008 R2 - Certificate Services (Windows Server 2008 R2: Zertifikatdienste).For more information about implementing a PKI, see Windows Server 2008 R2 - Certificate Services.

Die zentrale Funktion eines Zertifikats ist die Authentifizierung der Identität des Besitzers des Zertifikats gegenüber anderen.The primary function of a certificate is to authenticate the identity of the owner of the certificate to others. Ein Zertifikat enthält den öffentlichen Schlüssel des Besitzers, während der Besitzer den privaten Schlüssel behält.A certificate contains the public key of the owner, while the owner retains the private key. Der öffentliche Schlüssel kann zum Verschlüsseln von Nachrichten verwendet werden, die an den Besitzer des Zertifikats gesendet werden.The public key can be used to encrypt messages sent to the owner of the certificate. Nur der Besitzer hat Zugriff auf den privaten Schlüssel, sodass niemand anders diese Nachrichten entschlüsseln kann.Only the owner has access to the private key, so only the owner can decrypt those messages.

Zertifikate müssen von einer Zertifizierungsstelle ausgestellt werden, bei der es sich oft um einen Drittanbieter-Zertifikataussteller handelt.Certificates must be issued by a certification authority, which is often a third-party issuer of certificates. Windows-Domänen verfügen über eine Zertifizierungsstelle, von der Zertifikate für Computer in der Domäne ausgestellt werden können.On a Windows domain, a certification authority is included that can be used to issue certificates to computers on the domain.

Anzeigen von ZertifikatenViewing Certificates

Bei der Verwendung von Zertifikaten ist es oft erforderlich, die Zertifikate anzuzeigen und ihre Eigenschaften zu überprüfen.To work with certificates, it is often necessary to view them and examine their properties. Die einfachste Methode dazu ist das MMC (Microsoft Management Console)-Snap-In-Tool.This is easily done with the Microsoft Management Console (MMC) snap-in tool. Weitere Informationen finden Sie unter How to: View Certificates with the MMC Snap-in (Vorgehensweise: Anzeigen von Zertifikaten mit dem MMC-Snap-In).For more information, see How to: View Certificates with the MMC Snap-in.

ZertifikatspeicherCertificate Stores

Zertifikate werden in Speichern abgelegt.Certificates are found in stores. Die zwei Hauptspeicherorte sind in weitere Unterspeicher unterteilt.Two major store locations exist that are further divided into sub-stores. Administratoren können beide Hauptspeicher mit dem MMC-Snap-In-Tool anzeigen.If you are the administrator on a computer, you can view both major stores by using the MMC snap-in tool. Alle anderen Benutzer können lediglich den Speicher des aktuellen Benutzers anzeigen.Non-administrators can view only the current user store.

  • Lokaler ComputerspeicherThe local machine store. Dieser enthält die Zertifikate, die von den Prozessen des Computers verwendet werden, z. B. ASP.NETASP.NET.This contains the certificates accessed by machine processes, such as ASP.NETASP.NET. Speichern Sie die Zertifikate zur Authentifizierung des Servers gegenüber Clients im lokalen Computerspeicher.Use this location to store certificates that authenticate the server to clients.

  • Aktueller BenutzerspeicherThe current user store. Interaktive Anwendungen legen Zertifikate für den aktuellen Benutzer des Computers normalerweise im aktuellen Benutzerspeicher ab.Interactive applications typically place certificates here for the computer's current user. Beim Erstellen einer Clientanwendung werden die Zertifikate zur Authentifizierung eines Benutzers gegenüber einem Dienst normalerweise hier abgelegt.If you are creating a client application, this is where you typically place certificates that authenticate a user to a service.

Diese beiden Speicher teilen sich in weitere Unterspeicher auf.These two stores are further divided into sub-stores. Die wichtigsten Unterspeicher für die Programmierung mit WCF sind folgende:The most important of these when programming with WCF include:

  • Vertrauenswürdige StammzertifizierungsstellenTrusted Root Certification Authorities. Mit den Zertifikaten in diesem Speicher können Sie eine Zertifikatkette erstellen, die zum Zertifikat einer Zertifizierungsstelle in diesem Speicher zurückverfolgt werden kann.You can use the certificates in this store to create a chain of certificates, which can be traced back to a certification authority certificate in this store.

    Wichtig

    Der lokale Computer stuft alle Zertifikate in diesem Speicher als implizit vertrauenswürdig ein; dies gilt auch, wenn das Zertifikat im Speicher nicht von einer vertrauenswürdigen Zertifizierungsstelle eines Drittanbieters stammt.The local computer implicitly trusts any certificate placed in this store, even if the certificate does not come from a trusted third-party certification authority. Aus diesem Grund sollten Sie in diesem Speicher nur Zertifikate ablegen, wenn Sie dem Aussteller uneingeschränkt vertrauen und sich der möglichen Folgen bewusst sind.For this reason, do not place any certificate into this store unless you fully trust the issuer and understand the consequences.

  • PersönlichPersonal. Dieser Speicher wird für Zertifikate verwendet, die dem Benutzer eines Computers zugeordnet sind.This store is used for certificates associated with a user of a computer. Dieser Speicher wird normalerweise für Zertifikate verwendet, die von einem der Zertifikate der Zertifizierungsstelle im Speicher vertrauenswürdiger Stammzertifizierungsstellen stammen.Typically this store is used for certificates issued by one of the certification authority certificates found in the Trusted Root Certification Authorities store. Darüber hinaus können in diesem Speicher auch selbst ausgestellte Zertifikate abgelegt werden, die von einer Anwendung als vertrauenswürdig eingestuft werden.Alternatively, a certificate found here may be self-issued and trusted by an application.

Weitere Informationen zu den Zertifikatformaten finden Sie unter Certificate Stores (Zertifikatspeicher).For more information about certificate stores, see Certificate Stores.

Auswählen eines SpeichersSelecting a Store

Die Auswahl des Speichers für ein Zertifikat hängt davon ab, wie und wann der Dienst oder Client ausgeführt wird.Selecting where to store a certificate depends how and when the service or client runs. Dabei gelten folgende allgemeine Regeln:The following general rules apply:

  • Wenn der WCF-Dienst in einem Windows-Dienst gehostet wird, wird der Speicher des lokalen Computers verwendet.If the WCF service is hosted in a Windows service use the local machine store. Sie benötigen Administratorrechte, wenn Sie Zertifikate im lokalen Computerspeicher installieren möchten.Note that administrator privileges are required to install certificates into the local machine store.

  • Wenn es sich beim Dienst oder Client um eine Anwendung handelt, die unter einem Benutzerkonto ausgeführt wird, wird der Speicher des aktuellen Benutzers verwendet.If the service or client is an application that runs under a user account, then use the current user store.

Zugreifen auf SpeicherAccessing Stores

Speicher werden analog zu Ordnern auf einem Computer durch Zugriffssteuerungslisten (ACLs) geschützt.Stores are protected by access control lists (ACLs), just like folders on a computer. Beim Erstellen eines Diensts, der von Internet Information Services (IIS) gehostet wird, wird der ASP.NETASP.NET-Prozess unter dem ASP.NETASP.NET-Konto ausgeführt.When creating a service hosted by Internet Information Services (IIS), the ASP.NETASP.NET process runs under the ASP.NETASP.NET account. Dieses Konto muss über Zugriff auf den Speicher mit den Zertifikaten verfügen, die von einem Dienst verwendet werden.That account must have access to the store that contains the certificates a service uses. Die zentralen Speicher werden durch eine Standardzugriffssteuerungsliste geschützt, eine Änderung der Listen ist jedoch möglich.Each of the major stores is protected with a default access list, but the lists can be modified. Wenn Sie eine separate Rolle für den Speicherzugriff erstellen, muss diese über die entsprechende Zugriffsberechtigung verfügen.If you create a separate role to access a store, you must grant that role access permission. Unter How to: Create Temporary Certificates for Use During Development (Vorgehensweise: Erstellen temporärer Zertifikate zur Verwendung während der Entwicklung) erfahren Sie, wie Sie die Zugriffsliste mit dem Tool „WinHttpCertConfig.exe“ bearbeiten.To learn how to modify the access list using the WinHttpCertConfig.exe tool, see How to: Create Temporary Certificates for Use During Development. Weitere Informationen zur Verwendung von Clientzertifikaten mit IIS finden Sie unter Aufrufen eines Webdiensts mit einem Clientzertifikat zur Authentifizierung in einer ASP.NET-Webanwendung.For more information about using client certificates with IIS, see How to call a Web service by using a client certificate for authentication in an ASP.NET Web application.

Vertrauensketten und ZertifizierungsstellenChain Trust and Certificate Authorities

Zertifikate werden in einer Hierarchie erstellt, in der jedes einzelne Zertifikat mit der Zertifizierungsstelle verknüpft ist, von der es ausgestellt wurde.Certificates are created in a hierarchy where each individual certificate is linked to the CA that issued the certificate. Dieser Link verweist auf das Zertifikat der Zertifizierungsstelle.This link is to the CA’s certificate. Der Zertifizierungsstelle das Zertifikat klicken Sie dann Links auf die Zertifizierungsstelle, die der ursprünglichen ZS-Zertifikat ausgestellt hat.The CA’s certificate then links to the CA that issued the original CA’s certificate. Dieser Prozess wird wiederholt, bis das Zertifikat der Stammzertifizierungsstelle erreicht wird.This process is repeated up until the Root CA’s certificate is reached. Das Zertifikat der Stammzertifizierungsstelle ist grundsätzlich vertrauenswürdig.The Root CA’s certificate is inherently trusted.

Digitale Zertifikate werden verwendet, um eine Entität anhand dieser als Zertifikatkette bezeichneten Hierarchie zu authentifizieren.Digital certificates are used to authenticate an entity by relying on this hierarchy, also called a chain of trust. Sie können die Kette eines beliebigen Zertifikats mit dem MMC-Snap-In anzeigen, indem Sie auf das Zertifikat doppelklicken und anschließend auf die Registerkarte Zertifikatpfad klicken. Weitere Informationen zum Importieren von Zertifikatketten für eine Zertifizierungsstelle finden Sie unter How to: Specify the Certificate Authority Certificate Chain Used to Verify Signatures (Vorgehensweise: Angeben der Zertifikatkette der Zertifizierungsstelle zum Überprüfen von Signaturen).You can view any certificate's chain using the MMC snap-in by double-clicking any certificate, then clicking the Certificate Path tab. For more information about importing certificate chains for a Certification authority, see How to: Specify the Certificate Authority Certificate Chain Used to Verify Signatures.

Hinweis

Sie können jeden Aussteller zu einer vertrauenswürdigen Stammzertifizierungsstelle machen, indem Sie das Zertifikat des Ausstellers im Zertifikatspeicher der Stammzertifizierungsstelle ablegen.Any issuer can be designated a trusted root authority by placing the issuer's certificate in the trusted root authority certificate store.

Deaktivieren von VertrauenskettenDisabling Chain Trust

Wenn Sie einen neuen Dienst erstellen, verwenden Sie möglicherweise ein Zertifikat, das nicht von einer vertrauenswürdigen Stammzertifizierungsstelle ausgegeben wurde, oder das ausstellende Zertifikat befindet sich nicht im Speicher vertrauenswürdiger Stammzertifizierungsstellen.When creating a new service, you may be using a certificate that is not issued by a trusted root certificate, or the issuing certificate itself may not be in the Trusted Root Certification Authorities store. Sie können die Überprüfung der Kette von Vertrauensstellungen für ein Zertifikat in Entwicklungsumgebungen vorübergehend deaktivieren.For development purposes only, you can temporarily disable the mechanism that checks the chain of trust for a certificate. Legen Sie dazu die CertificateValidationMode-Eigenschaft auf entweder PeerTrust oder PeerOrChainTrust fest.To do this, set the CertificateValidationMode property to either PeerTrust or PeerOrChainTrust. Durch den jeweiligen Modus wird angegeben, dass das Zertifikat entweder selbst ausgegeben (Peervertrauenszertifikat) oder Teil einer Kette von Vertrauensstellungen ist.Either mode specifies that the certificate can either be self-issued (peer trust) or part of a chain of trust. Die Eigenschaft kann auf eine der folgenden Klassen festgelegt werden:You can set the property on any of the following classes.

KlasseClass EigenschaftProperty
X509ClientCertificateAuthentication X509ClientCertificateAuthentication.CertificateValidationMode
X509PeerCertificateAuthentication X509PeerCertificateAuthentication.CertificateValidationMode
X509ServiceCertificateAuthentication X509ServiceCertificateAuthentication.CertificateValidationMode
IssuedTokenServiceCredential IssuedTokenServiceCredential.CertificateValidationMode

Sie können die Eigenschaft auch in der Konfiguration festlegen.You can also set the property using configuration. Folgende Elemente werden verwendet, um den Validierungsmodus anzugeben:The following elements are used to specify the validation mode:

Benutzerdefinierte AuthentifizierungCustom Authentication

Die CertificateValidationMode-Eigenschaft ermöglicht es auch, die Authentifizierung von Zertifikaten anzupassen.The CertificateValidationMode property also enables you to customize how certificates are authenticated. Die Standardvertrauensebene ist ChainTrust.By default, the level is set to ChainTrust. Wenn Sie den Custom-Wert verwenden möchten, müssen Sie auch das CustomCertificateValidatorType-Attribut auf eine Assembly und einen Typ festlegen, die zur Validierung des Zertifikats verwendet werden.To use the Custom value, you must also set the CustomCertificateValidatorType attribute to an assembly and type used to validate the certificate. Wenn Sie eine benutzerdefinierte Überprüfung erstellen möchten, müssen Sie die abstrakte X509CertificateValidator-Klasse vererben.To create a custom validator, you must inherit from the abstract X509CertificateValidator class.

Wenn Sie eine benutzerdefinierte Authentifizierung erstellen, müssen Sie auf jeden Fall die Validate-Methode überschreiben.When creating a custom authenticator, the most important method to override is the Validate method. Ein Beispiel zur benutzerdefinierten Authentifizierung finden Sie im Beispiel zum Validierungssteuerelement des X.509-Zertifikats.For an example of custom authentication, see the X.509 Certificate Validator sample. Weitere Informationen finden Sie unter Custom Credential and Credential Validation (Benutzerdefinierte Anmeldeinformationen und Validierung der Anmeldeinformationen).For more information, see Custom Credential and Credential Validation.

Verwendung des neuen Powershell-SelfSignedCertificate-Cmdlets zum Erstellen einer ZertifikatketteUsing the Powershell New-SelfSignedCertificate Cmdlet to Build a Certificate Chain

Das New-SelfSignedCertificate des Powershell-Cmdlet erstellt x. 509-Zertifikaten und privaten und öffentlichen Schlüsselpaaren.The Powershell New-SelfSignedCertificate cmdlet creates X.509 certificates and private key/public key pairs. Sie können den privaten Schlüssel speichern und zum Ausstellen und Signieren neuer Zertifikate verwenden, um eine Hierarchie von Zertifikaten in einer Kette zu simulieren.You can save the private key to disk and then use it to issue and sign new certificates, thus simulating a hierarchy of chained certificates. Das Cmdlet dient lediglich als Hilfe beim Entwickeln von services und sollte nie zum Erstellen von Zertifikaten für tatsächliche Bereitstellungen verwendet werden.The cmdlet is intended for use only as an aid when developing services and should never be used to create certificates for actual deployment. Wenn Sie einen WCF-Dienst zu entwickeln, gehen Sie folgendermaßen vor, um eine Kette von Vertrauensstellungen mit dem Cmdlet "New-SelfSignedCertificate" zu erstellen.When developing a WCF service, use the following steps to build a chain of trust with the New-SelfSignedCertificate cmdlet.

Erstellen Sie eine Kette von Vertrauensstellungen mit dem Cmdlet "New-SelfSignedCertificate"To build a chain of trust with the New-SelfSignedCertificate cmdlet

  1. Erstellen Sie ein temporären Stammzertifizierungsstellen (selbst signiertes)-Zertifikat mit dem Cmdlet "New-SelfSignedCertificate".Create a temporary root authority (self-signed) certificate using the New-SelfSignedCertificate cmdlet. Speichern Sie den privaten Schlüssel.Save the private key to the disk.

  2. Verwenden Sie das neue Zertifikat, um ein anderes Zertifikat auszustellen, das den öffentlichen Schlüssel enthält.Use the new certificate to issue another certificate that contains the public key.

  3. Importieren Sie das Zertifikat der Stammzertifizierungsstelle in den Speicher vertrauenswürdiger Stammzertifizierungsstellen.Import the root authority certificate into the Trusted Root Certification Authorities store.

  4. Anweisungen finden Sie unter How to: Create Temporary Certificates for Use During Development (Vorgehensweise: Erstellen von temporären Zertifikaten für die Verwendung während der Entwicklung).For step-by-step instructions, see How to: Create Temporary Certificates for Use During Development.

Welches Zertifikat soll verwendet werden?Which Certificate to Use?

Im Zusammenhang mit Zertifikaten wird häufig danach gefragt, welches Zertifikat und warum dieses verwendet werden soll.Common questions about certificates are which certificate to use, and why. Die Antwort hängt davon ab, ob Sie einen Client oder einen Dienst programmieren.The answer depends on whether you are programming a client or service. Die folgenden Informationen bieten eine allgemeine Orientierung und stellen keine erschöpfende Antwort auf diese Fragen dar.The following information provides a general guideline and is not an exhaustive answer to these questions.

DienstzertifikateService Certificates

Dienstzertifikate werden in erster Linie zur Authentifizierung von Servern gegenüber Clients verwendet.Service certificates have the primary task of authenticating the server to clients. Bei der Authentifizierung eines Servers durch einen Client wird u.a. zunächst überprüft, ob der Wert im Feld Antragsteller mit dem Uniform Resource Identifier (URI) übereinstimmt, der zum Herstellen der Verbindung mit dem Dienst verwendet wird: das DNS von Client und Server muss übereinstimmen.One of the initial checks when a client authenticates a server is to compare the value of the Subject field to the Uniform Resource Identifier (URI) used to contact the service: the DNS of both must match. Wenn der URI des Diensts ist z. B. http://www.contoso.com/endpoint/ die Betreff Feld muss auch den Wert enthalten www.contoso.com.For example, if the URI of the service is http://www.contoso.com/endpoint/ then the Subject field must also contain the value www.contoso.com.

Das Feld kann mehrere Werte enthalten, denen jeweils eine Initialisierung zur Angabe des Werts vorangeht.Note that the field can contain several values, each prefixed with an initialization to indicate the value. In den meisten Fällen die Initialisierung ist "CN" für den allgemeinen Namen, z. B., CN = www.contoso.com.Most commonly, the initialization is "CN" for common name, for example, CN = www.contoso.com. Das Feld Antragsteller kann auch leer sein. In diesem Fall kann das Feld Alternativer Antragstellername den Wert DNS-Name enthalten.It is also possible for the Subject field to be blank, in which case the Subject Alternative Name field can contain the DNS Name value.

Der Wert des Felds Beabsichtigte Zwecke des Zertifikats sollte einen entsprechenden Wert enthalten, z.B. „Serverauthentifizierung“ oder „Clientauthentifizierung“.Also note the value of the Intended Purposes field of the certificate should include an appropriate value, such as "Server Authentication" or "Client Authentication".

ClientzertifikateClient Certificates

Clientzertifikate werden normalerweise nicht von der Zertifizierungsstelle eines Drittanbieters ausgegeben.Client certificates are not typically issued by a third-party certification authority. Stattdessen enthält der persönliche Speicher des aktuellen Benutzers für gewöhnlich Zertifikate, die von einer Stammzertifizierungsstelle dort abgelegt wurden und deren beabsichtigter Zweck die "Clientauthentifizierung" ist.Instead, the Personal store of the current user location typically contains certificates placed there by a root authority, with an intended purpose of "Client Authentication". Diese Zertifikate können vom Client verwendet werden, wenn eine wechselseitige Authentifizierung erforderlich ist.The client can use such a certificate when mutual authentication is required.

Online-Sperrüberprüfung und Offline-SperrüberprüfungOnline Revocation and Offline Revocation

ZertifikatsgültigkeitCertificate Validity

Jedes Zertifikat ist nur für einen angegebenen Zeitraum gültig, der auch als Gültigkeitsdauer bezeichnet wird.Every certificate is valid only for a given period of time, called the validity period. Die Gültigkeitsdauer wird durch die Felder Gültig ab und Gültig bis eines X.509-Zertifikats bestimmt.The validity period is defined by the Valid from and Valid to fields of an X.509 certificate. Während der Authentifizierung wird überprüft, ob das Zertifikat eine entsprechende Gültigkeitsdauer aufweist.During authentication, the certificate is checked to determine whether the certificate is still within the validity period.

ZertifikatsperrlisteCertificate Revocation List

Zertifikate können innerhalb der Gültigkeitsdauer jederzeit von der Zertifizierungsstelle widerrufen werden.At any time during the validity period, the certification authority can revoke a certificate. Dafür kann es viele Gründe geben, beispielsweise kann die Sicherheit des privaten Schlüssels eines Zertifikats gefährdet sein.This can occur for many reasons, such as a compromise of the private key of the certificate.

In diesem Fall werden auch alle untergeordneten Zertifikate des widerrufenen Zertifikats ungültig und im Rahmen des Authentifizierungsprozesses als nicht vertrauenswürdig eingestuft.When this occurs, any chains that descend from the revoked certificate are also invalid, and are not trusted during authentication procedures. Mithilfe einer Zertifikatsperrliste (CRL), die über Datums- und Zeitstempel verfügt, können Sie herausfinden, welche Zertifikate widerrufen wurden.To find out which certificates are revoked, each issuer publishes a time- and date-stamped certificate revocation list (CRL). Diese Liste kann mit einer Online-Sperrüberprüfung oder mit einer Offline-Sperrüberprüfung überprüft werden, indem die RevocationMode-Eigenschaft oder die DefaultRevocationMode-Eigenschaft der folgenden Klassen einschließlich der X509RevocationMode-Klassen auf einen der X509ClientCertificateAuthentication-Enumerationswerte festgelegt wird: X509PeerCertificateAuthentication, X509ServiceCertificateAuthentication, IssuedTokenServiceCredential.The list can be checked using either online revocation or offline revocation by setting the RevocationMode or DefaultRevocationMode property of the following classes to one of the X509RevocationMode enumeration values: X509ClientCertificateAuthentication, X509PeerCertificateAuthentication, X509ServiceCertificateAuthentication, and the IssuedTokenServiceCredential classes. Der Standardwert aller Eigenschaften lautet Online.The default value for all properties is Online.

Sie können den Modus mithilfe des revocationMode-Attributs von <authentication> (von <serviceBehaviors>) und <authentication> (von <endpointBehaviors>) auch über die Konfiguration festlegen.You can also set the mode in configuration using the revocationMode attribute of both the <authentication> (of the <serviceBehaviors>) and the <authentication> (of the <endpointBehaviors>).

SetCertificate-MethodeThe SetCertificate Method

In WCF müssen häufig Zertifikate oder Gruppen von Zertifikaten angegeben werden, die von einem Dienst oder von einem Client zum Authentifizieren, Verschlüsseln oder digitalen Signieren von Nachrichten verwendet werden.In WCF, you must often specify a certificate or set of certificates a service or client is to use to authenticate, encrypt, or digitally sign a message. Dies kann programmgesteuert mit der SetCertificate-Methode verschiedener Klassen geschehen, die X.509-Zertifikate darstellen.You can do this programmatically by using the SetCertificate method of various classes that represent X.509 certificates. Folgende Klassen geben mit der SetCertificate-Methode ein Zertifikat an.The following classes use the SetCertificate method to specify a certificate.

KlasseClass MethodeMethod
PeerCredential SetCertificate
X509CertificateInitiatorClientCredential SetCertificate
X509CertificateRecipientServiceCredential SetCertificate
X509CertificateInitiatorServiceCredential
SetCertificate

Bei der SetCertificate-Methode werden ein Speicherort und ein Speicher angegeben sowie ein Suchtyp (x509FindType-Parameter), der ein Feld des Zertifikats bestimmt, und ein Wert, der im Feld gefunden werden soll.The SetCertificate method works by designating a store location and store, a "find" type (x509FindType parameter) that specifies a field of the certificate, and a value to find in the field. So wird beispielsweise mit dem folgenden Code eine ServiceHost-Instanz erstellt, und das Dienstzertifikat, mit dem der Dienst gegenüber Clients mit der SetCertificate-Methode authentifiziert wird, wird festgelegt.For example, the following code creates a ServiceHost instance and sets the service certificate used to authenticate the service to clients with the SetCertificate method.

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")

Mehrere Zertifikate mit dem gleichen WertMultiple Certificates with the Same Value

Ein Speicher kann mehrere Zertifikate mit dem gleichen Antragstellernamen enthalten.A store may contain multiple certificates with the same subject name. Wenn Sie also x509FindType auf FindBySubjectName oder FindBySubjectDistinguishedName festlegen und mehrere Zertifikate den gleichen Wert aufweisen, wird eine Ausnahme ausgelöst, da nicht ermittelt werden kann, welches Zertifikat benötigt wird.This means that if you specify that the x509FindType is FindBySubjectName or FindBySubjectDistinguishedName, and more than one certificate has the same value, an exception is thrown because there is no way to distinguish which certificate is required. Legen Sie den x509FindType auf FindByThumbprint fest, um dem entgegenzuwirken.You can mitigate this by setting the x509FindType to FindByThumbprint. Das Fingerabdruckfeld enthält einen eindeutigen Wert, mit dem ein bestimmtes Zertifikat in einem Speicher gefunden werden kann.The thumbprint field contains a unique value that can be used to find a specific certificate in a store. Dies hat jedoch einen Nachteil: Wenn das Zertifikat widerrufen oder erneuert wird, schlägt die SetCertificate-Methode fehl, da der Fingerabdruck ebenfalls nicht mehr verfügbar ist.However, this has its own disadvantage: if the certificate is revoked or renewed, the SetCertificate method fails because the thumbprint is also gone. Ist das Zertifikat nicht mehr gültig ist, schlägt die Authentifizierung fehl.Or, if the certificate is no longer valid, authentication fails. Legen Sie den x590FindType-Parameter auf FindByIssuerName fest, und geben Sie den Namen des Ausstellers an, um dem entgegenzuwirken.The way to mitigate this is to set the x590FindType parameter to FindByIssuerName and specify the issuer's name. Wenn kein bestimmter Aussteller angegeben werden muss, können Sie auch einen der anderen X509FindType-Enumerationswerte wie FindByTimeValid festlegen.If no particular issuer is required, you can also set one of the other X509FindType enumeration values, such as FindByTimeValid.

Zertifikate in der KonfigurationCertificates in Configuration

Sie können Zertifikate auch in der Konfiguration festlegen.You can also set certificates by using configuration. Wenn Sie einen Dienst erstellen, werden die Anmeldeinformationen, einschließlich der Zertifikate unter <serviceBehaviors> angegeben.If you are creating a service, credentials, including certificates, are specified under the <serviceBehaviors>. Wenn Sie einen Client programmieren, werden die Zertifikate unter <endpointBehaviors> angegeben.When you are programming a client, certificates are specified under the <endpointBehaviors>.

Zuordnen eines Zertifikats zu einem BenutzerkontoMapping a Certificate to a User Account

IIS und Active Directory bieten u. a. die Möglichkeit, ein Zertifikat einem Windows-Benutzerkonto zuzuordnen.A feature of IIS and Active Directory is the ability to map a certificate to a Windows user account. Weitere Informationen über das Feature finden Sie unter Map certificates to user accounts (Zuordnen von Zertifikaten zu Benutzerkonten).For more information about the feature, see Map certificates to user accounts.

Informationen zur Verwendung der Azure Directory-Zuweisung finden Sie unter Mapping Client Certificates with Directory Service Mapping (Zuordnen von Clientzertifikaten mit der Verzeichnisdienstzuordnung).For more information about using Active Directory mapping, see Mapping Client Certificates with Directory Service Mapping.

Wenn diese Funktion aktiviert ist, können Sie die MapClientCertificateToWindowsAccount-Eigenschaft der X509ClientCertificateAuthentication-Klasse auf true festlegen.With this capability enabled, you can set the MapClientCertificateToWindowsAccount property of the X509ClientCertificateAuthentication class to true. In der Konfiguration können Sie das mapClientCertificateToWindowsAccount-Attribut des <authentication>-Elements wie im folgenden Codebeispiel auf true festlegen.In configuration, you can set the mapClientCertificateToWindowsAccount attribute of the <authentication> element to true, as shown in the following code.

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

Die Zuordnung eines X.509-Zertifikats zu einem Token, das ein Windows-Benutzerkonto darstellt, wird als Erweiterung der Berechtigungen angesehen, da das Windows-Token nach der Zuordnung Zugriff auf geschützte Ressourcen ermöglicht.Mapping an X.509 certificate to the token that represents a Windows user account is considered an elevation of privilege because, once mapped, the Windows token can be used to gain access to protected resources. Das X.509-Zertifikat muss daher vor der Zuordnung die entsprechenden Anforderungen der Domänenrichtlinie erfüllen.Therefore, domain policy requires the X.509 certificate to comply with its policy prior to mapping. Dies wird durch das SChannel-Sicherheitspaket sichergestellt.The SChannel security package enforces this requirement.

WCF stellt bei Verwendung von .NET Framework Version 3.5.NET Framework version 3.5 oder höher sicher, dass das Zertifikat der Domänenrichtlinie entspricht, bevor es einem Windows-Konto zugeordnet wird.When using .NET Framework Version 3.5.NET Framework version 3.5 or later, WCF ensures the certificate conforms to domain policy before it is mapped to a Windows account.

Im ersten Release von WCF erfolgt die Zuordnung ohne auf die Domänenrichtlinie zurückzugreifen.In the first release of WCF, mapping is done without consulting the domain policy. Möglicherweise tritt daher bei älteren Anwendungen, die mit dem ersten Release ausgeführt werden konnten, ein Fehler auf, wenn die Zuordnung aktiviert ist und die Anforderungen der Domänenrichtlinie vom X.509-Zertifikat nicht erfüllt werden.Therefore it is possible that older applications that used to work when running under the first release, fails if the mapping is enabled and the X.509 certificate does not satisfy the domain policy.

Siehe auchSee Also

System.ServiceModel.Channels
System.ServiceModel.Security
System.ServiceModel
X509FindType
Sichern von Diensten und ClientsSecuring Services and Clients