Freigeben über


Zertifikatauswahl und Validierung

Die System.Net Klassen unterstützen mehrere Möglichkeiten zum Auswählen und Überprüfen System.Security.Cryptography.X509Certificates von SSL-Verbindungen (Secure Socket Layer). Ein Client kann ein oder mehrere Zertifikate auswählen, um sich selbst bei einem Server zu authentifizieren. Ein Server kann erfordern, dass ein Clientzertifikat mindestens ein spezifisches Attribut für die Authentifizierung hat.

Definition

Ein Zertifikat ist ein ASCII-Bytestream, der einen öffentlichen Schlüssel, Attribute (z. B. Versionsnummer, Seriennummer und Ablaufdatum) und eine digitale Signatur von einer Zertifizierungsstelle enthält. Zertifikate werden verwendet, um eine verschlüsselte Verbindung herzustellen oder einen Client auf einem Server zu authentifizieren.

Clientzertifikatauswahl und -validierung

Ein Client kann ein oder mehrere Zertifikate für eine bestimmte SSL-Verbindung auswählen. Clientzertifikate können der SSL-Verbindung mit einem Webserver oder einem SMTP-E-Mail-Server zugeordnet werden. Ein Client fügt einer Auflistung von X509Certificate Oder X509Certificate2 Klassenobjekten Zertifikate hinzu. Nehmen wir E-Mails als Beispiel. Die Zertifikatauflistung ist eine Instanz von X509CertificateCollection, die der ClientCertificates-Eigenschaft der SmtpClient-Klasse zugeordnet ist. Die HttpWebRequest Klasse hat eine ähnliche ClientCertificates Eigenschaft.

Der Hauptunterschied zwischen der X509Certificate Klasse und der X509Certificate2 Klasse besteht darin, dass sich der private Schlüssel im Zertifikatspeicher für die X509Certificate Klasse befinden muss.

Selbst wenn Zertifikate einer Sammlung hinzugefügt und einer bestimmten SSL-Verbindung zugeordnet sind, werden keine Zertifikate an den Server gesendet, es sei denn, der Server fordert sie an. Wenn mehrere Clientzertifikate für eine Verbindung festgelegt werden, wird die beste auf grundlage eines Algorithmus verwendet, der die Übereinstimmung zwischen der Liste der vom Server bereitgestellten Zertifikataussteller und dem Namen des Clientzertifikatausstellers berücksichtigt.

Die SslStream Klasse bietet noch mehr Kontrolle über den SSL-Handshake. Ein Client kann einen Delegaten angeben, um das zu verwendende Clientzertifikat zu wählen.

Ein Remoteserver kann überprüfen, ob ein Clientzertifikat gültig, aktuell und von der entsprechenden Zertifizierungsstelle signiert ist. Zum Erzwingen der Zertifikatsüberprüfung kann ein Delegierter zu ServerCertificateValidationCallback hinzugefügt werden.

Clientzertifikatauswahl

.NET Framework wählt das Clientzertifikat aus, das auf folgende Weise auf dem Server angezeigt werden soll:

  1. Wenn zuvor ein Clientzertifikat auf dem Server angezeigt wurde, wird das Zertifikat bei der ersten Darstellung zwischengespeichert und für nachfolgende Clientzertifikatanforderungen wiederverwendet.

  2. Wenn ein Delegat vorhanden ist, verwenden Sie immer das Ergebnis aus dem Delegaten als auszuwählendes Clientzertifikat. Versuchen Sie, nach Möglichkeit ein im Cache gespeichertes Zertifikat zu verwenden, nutzen Sie jedoch keine im Cache gespeicherten anonymen Anmeldeinformationen, wenn der Delegat null zurückgegeben hat und die Zertifikatsammlung nicht leer ist.

  3. Wenn dies die erste Herausforderung für ein Clientzertifikat ist, listet das Framework die Zertifikate in X509Certificate oder die Klassenobjekte auf, die X509Certificate2 der Verbindung zugeordnet sind, und sucht nach einer Übereinstimmung zwischen der Liste der Zertifikataussteller, die vom Server und dem Namen des Clientzertifikatausstellers bereitgestellt werden. Das erste Zertifikat, das übereinstimmt, wird an den Server gesendet. Wenn kein Zertifikat übereinstimmt oder die Zertifikatsammlung leer ist, werden anonyme Anmeldeinformationen an den Server gesendet.

Tools für die Zertifikatkonfiguration

Für die Client- und Serverzertifikatkonfiguration stehen eine Reihe von Tools zur Verfügung.

Das Winhttpcertcfg.exe Tool kann zum Konfigurieren von Clientzertifikaten verwendet werden. Das Winhttpcertcfg.exe Tool wird als eines der Tools mit dem Windows Server 2003 Resource Kit bereitgestellt. Dieses Tool ist auch als Download im Rahmen der Windows Server 2003 Resource Kit Tools unter www.microsoft.comverfügbar.

Das HttpCfg.exe Tool kann zum Konfigurieren von Serverzertifikaten für die HttpListener Klasse verwendet werden. Das HttpCfg.exe Tool wird als eines der Supporttools für Windows Server 2003 und Windows XP Service Pack 2 bereitgestellt. HttpCfg.exe und die anderen Supporttools werden nicht standardmäßig unter Windows Server 2003 oder Windows XP installiert. Unter Windows Server 2003. die Supporttools werden separat aus dem folgenden Ordner und der Datei auf der Windows Server 2003 CD-ROM installiert:

\Support\Tools\Suptools.msi

Für die Verwendung mit Windows XP Service Pack 2 stehen die Windows XP-Supporttools als Download von www.microsoft.comzur Verfügung.

Der Quellcode für eine Version des HttpCfg.exe Tools wird auch als Beispiel mit dem Windows Server SDK bereitgestellt. Der Quellcode für das HttpCfg.exe-Beispiel wird standardmäßig mit den Netzwerkbeispielen im Rahmen des Windows SDK unter dem folgenden Ordner installiert:

C:\Programme\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.

Siehe auch