Zertifikatauswahl und -überprüfungCertificate Selection and Validation

Die System.Net-Klassen unterstützen mehrere Möglichkeiten zur Auswahl und Überprüfung von System.Security.Cryptography.X509Certificates für SSL-Verbindungen (Secure Socket Layer).The System.Net classes support several ways to select and validate System.Security.Cryptography.X509Certificates for Secure Socket Layer (SSL) connections. Ein Client kann ein oder mehrere Zertifikate zur Authentifizierung gegenüber eines Servers wählen.A client can select one or more certificates to authenticate itself to a server. Ein Server kann fordern, dass ein Clientzertifikat ein oder mehrere bestimmte Attribute für die Authentifizierung aufweist.A server can require that a client certificate have one or more specific attributes for authentication.

DefinitionDefinition

Ein Zertifikat ist ein ASCII-Datenstrom, der einen öffentlichen Schlüssel, Attribute (z.B. Versionsnummer, Seriennummer und Ablaufdatum) und eine digitale Signatur von einer Zertifizierungsstelle enthält.A certificate is an ASCII byte stream that contains a public key, attributes (such as version number, serial number, and expiration date) and a digital signature from a Certificate Authority. Zertifikate werden zum Herstellen einer verschlüsselten Verbindung oder zum Authentifizieren eines Clients mit einem Server verwendet.Certificates are used to establish an encrypted connection or to authenticate a client to a server.

Zertifikatauswahl und -überprüfungClient Certificate Selection and Validation

Ein Client kann ein oder mehrere Zertifikate für eine bestimmte SSL-Verbindung auswählen.A client can select one or more certificates for a specific SSL connection. Clientzertifikate können mit der SSL-Verbindung einem Webserver oder einen SMTP-Mailserver zugeordnet werden.Client certificates can be associated with the SSL connection to a web server or an SMTP mail server. Ein Client fügt Zertifikate zu einer Sammlung von X509Certificate- oder X509Certificate2-Klassenobjekten hinzu.A client adds certificates to a collection of X509Certificate or X509Certificate2 class objects. Nehmen wir E-Mails als Beispiel. Die Zertifikatauflistung ist eine Instanz von X509CertificateCollection, die der ClientCertificates-Eigenschaft der SmtpClient-Klasse zugeordnet ist.Using email as an example, the certificate collection is an instance of a X509CertificateCollection) associated with the ClientCertificates property of the SmtpClient class. Die HttpWebRequest-Klasse verfügt über eine ähnliche ClientCertificates-Eigenschaft.The HttpWebRequest class has a similar ClientCertificates property.

Der Hauptunterschied zwischen der X509Certificate- und der X509Certificate2-Klasse ist, dass sich der private Schlüssel für die X509Certificate-Klasse im Zertifikatspeicher befinden muss.The primary difference between the X509Certificate and the X509Certificate2 class is that the private key must reside in the certificate store for the X509Certificate class.

Auch wenn Zertifikate zu einer Auflistung hinzugefügt und einer bestimmten SSL-Verbindung zugeordnet werden, werden keine Zertifikate an den Server gesendet, außer der Server fordert dies an.Even if certificates are added to a collection and associated with a specific SSL connection, no certificates will be sent to the server unless the server requests them. Wenn mehrere Clientzertifikate für eine Verbindung festgelegt werden, wird das beste verwendet werden. Diese Entscheidung basiert auf einem Algorithmus, der die Übereinstimmung zwischen der durch den Server bereitgestellten Liste der Zertifikataussteller und den Ausstellernamen für Clientzertifikate berücksichtigt.If multiple client certificates are set on a connection, the best one will be used based on an algorithm that considers the match between the list of certificate issuers provided by the server and the client certificate issuer name.

Die SslStream-Klasse stellt noch mehr Kontrolle über den SSL-Handshake bereit.The SslStream class provides even more control over the SSL handshake. Ein Client kann einen Delegaten zum Auswählen des zu verwendenden Clientzertifikats angeben.A client can specify a delegate to pick which client certificate to use.

Ein Remoteserver kann überprüfen, ob ein Clientzertifikat gültig, aktuell und von der entsprechenden Zertifizierungsstelle unterzeichnet ist.A remote server can verify that a client certificate is valid, current, and signed by the appropriate Certificate Authority. Ein Delegat kann zu ServerCertificateValidationCallback hinzugefügt werden, um die Überprüfung des Zertifikats zu erzwingen.A delegate can be added to the ServerCertificateValidationCallback to enforce certificate validation.

ClientzertifikatauswahlClient Certificate Selection

.NET Framework wählt das Clientzertifikat aus, das dem Server auf folgende Weise präsentiert wird:The .NET Framework selects the client certificate to present to the server in the following manner:

  1. Wenn ein Clientzertifikat dem Server bereits gezeigt wurde, wird das Zertifikat beim ersten Mal zwischengespeichert und für nachfolgende Clientzertifikatanforderungen wiederverwendet.If a client certificate was presented previously to the server, the certificate is cached when first presented and is reused for subsequent client certificate requests.

  2. Wenn ein Delegat vorhanden ist, verwenden Sie immer das Ergebnis aus dem Delegaten als auszuwählendes Clientzertifikat.If a delegate is present, always use the result from the delegate as the client certificate to select. Versuchen Sie nach Möglichkeit ein zwischengespeichertes Zertifikat zu verwenden, aber verwenden Sie keine zwischengespeicherten anonymen Anmeldeinformationen, wenn der Delegat NULL zurückgegeben hat und die Zertifikatauflistung nicht leer ist.Try to use a cached certificate when possible, but do not use cached anonymous credentials if the delegate has returned null and the certificate collection is not empty.

  3. Ist dies die erste Abfrage für ein Clientzertifikat, listet das Framework die Zertifikate in X509Certificate- oder X509Certificate2-Klassenobjekten auf, die der Verbindung zugeordnet sind. Sie suchen nach einer Übereinstimmung zwischen der vom Server bereitgestellten Liste der Zertifikataussteller und dem Ausstellernamen für Clientzertifikate.If this is the first challenge for a client certificate, the Framework enumerates the certificates in X509Certificate or the X509Certificate2 class objects associated with the connection, looking for a match between the list of certificate issuers provided by the server and the client certificate issuer name. Das erste übereinstimmende Zertifikat wird an den Server gesendet.The first certificate that matches is sent to the server. Wenn kein Zertifikat übereinstimmt oder die Zertifikatauflistung leer ist, wird eine anonyme Anmeldeinformation an den Server gesendet.If no certificate matches or the certificate collection is empty, then an anonymous credential is sent to the server.

Tools für die ZertifikatkonfigurationTools for Certificate Configuration

Eine Reihe von Tools stehen für die Zertifikatkonfiguration für Client und Server zur Verfügung.A number of tools are available for client and server certificate configuration.

Das Winhttpcertcfg.exe-Tool kann zur Konfiguration von Clientzertifikaten verwendet werden.The Winhttpcertcfg.exe tool can be used to configure client certificates. Das Winhttpcertcfg.exe-Tool wird als eines der Tools im Windows Server 2003 Resource Kit bereitgestellt.The Winhttpcertcfg.exe tool is provided as one of the tools with the Windows Server 2003 Resource Kit. Dieses Tool steht auch als Teil der Windows Server 2003 Ressource Kit-Tools unter www.microsoft.com zum Download zur Verfügung.This tool is also available as a download as part of the Windows Server 2003 Resource Kit Tools at www.microsoft.com.

Das HttpCfg.exe-Tool kann verwendet werden, um Serverzertifikate für die HttpListener-Klasse zu konfigurieren.The HttpCfg.exe tool can be used to configure server certificates for the HttpListener class. Das HttpCfg.exe-Tool dient als eines der Supporttools für Windows Server 2003 und Windows XP Service Pack 2.The HttpCfg.exe tool is provided as one of the support tools for Windows Server 2003 and Windows XP Service Pack 2. HttpCfg.exe und die anderen Supporttools werden standardmäßig unter Windows Server 2003 oder Windows XP installiert.HttpCfg.exe and the other support tools are not installed by default on either Windows Server 2003 or Windows XP. Unter Windows Server 2003On Windows Server 2003. werden die Supporttools separat vom folgenden Ordner und der Datei auf der Windows Server 2003-CD-ROM installiert:the support tools are installed separately from the following folder and file on the Windows Server 2003 CD-ROM:

\Support\Tools\Suptools.msi\Support\Tools\Suptools.msi

Für die Verwendung mit Windows XP Service Pack 2 stehen Windows XP-Supporttools unter www.microsoft.com zum Download zur Verfügung.For use with Windows XP Service Pack 2, the Windows XP Support Tools are available as a download from www.microsoft.com.

Der Quellcode für eine Version des HttpCfg.exe-Tools wird auch als ein Beispiel mit dem Windows Server SDK bereitgestellt.The source code to a version of the HttpCfg.exe tool is also provided as a sample with the Windows Server SDK. Der Quellcode des HttpCfg.exe-Beispiels wird standardmäßig mit den Netzwerkbeispielen als Teil der Windows SDK unter folgendem Ordner installiert:The source code to the HttpCfg.exe sample is installed by default with the networking samples as part of the Windows SDK under the following folder:

C:\Programme\Microsoft SDKs\Windows\v1.0\Samples\NetDS\http\serviceconfigC:\Program Files\Microsoft SDKs\Windows\v1.0\Samples\NetDS\http\serviceconfig

Zusätzlich zu diesen Tools stellen die X509Certificate- und X509Certificate2-Klassen Methoden zum Laden eines Zertifikats aus dem Dateisystem bereit.In addition to these tools, the X509Certificate and X509Certificate2 classes provides methods for loading a certificate from the file system.

Siehe auchSee also