Share via


Gewusst wie: Verwenden von separaten X.509-Zertifikaten für Signieren und Verschlüsselung

In diesem Thema wird veranschaulicht, wie Windows Communication Foundation (WCF) zur Verwendung verschiedener Zertifikate zum Signieren und Verschlüsseln von Nachrichten sowohl für die Client- als auch die Serviceseite konfiguriert wird.

Damit verschiedene Zertifikate für das Signieren und Verschlüsseln verwendet werden können, müssen benutzerdefinierte Anmeldeinformationen für Client oder Dienst (oder beides) erstellt werden, da WCF keine API zum Einstellen mehrerer Client- oder Dienstzertifikate bietet. Außerdem muss ein Sicherheitstokenmanager zur Verfügung gestellt werden, um die Informationen der Zertifikate zu nutzen und einen entsprechenden Sicherheitstokenanbieter für die angegebene Schlüsselverwendung und Nachrichtenrichtung zu erstellen.

Das folgende Diagramm enthält die wichtigsten verwendeten Klassen, die Klassen, von denen geerbt wird (gekennzeichnet durch einen Aufwärtspfeil), sowie die Rückgabetypen bestimmter Methoden und Eigenschaften.

Weitere Informationen zu benutzerdefinierten Anmeldeinformationen finden Sie unter Gewusst wie: Erstellen von benutzerdefinierten Client- und Dienstanmeldeinformationen.

Darüber hinaus muss eine Prüfung für die benutzerdefinierte Identität erstellt werden, die dann in einer benutzerdefinierten Bindung mit einem benutzerdefinierten Sicherheitsbindungselement verknüpft werden muss. Des Weiteren müssen anstelle der Standardanmeldeinformationen die benutzerdefinierten Anmeldeinformationen verwendet werden.

Das folgende Diagramm gibt Aufschluss über die Klassen für die benutzerdefinierte Bindung sowie über die Verknüpfung der Prüfung der benutzerdefinierten Identität. An diesem Prozess sind mehrere Bindungselemente beteiligt, die alle von BindingElement erben. Das AsymmetricSecurityBindingElement besitzt die LocalClientSecuritySettings-Eigenschaft, die eine Instanz von IdentityVerifier zurückgibt, von der aus MyIdentityVerifier angepasst wird.

Weitere Informationen zum Erstellen der Prüfung der benutzerdefinierten Identität finden Sie unter Gewusst wie: Erstellen einer benutzerdefinierten Clientidentitätsüberprüfung.

So verwenden Sie separate Zertifikate für Signieren und Verschlüsselung

  1. Definieren Sie eine neue Clientanmeldeinformationen-Klasse, die von der ClientCredentials-Klasse erbt. Implementieren Sie vier neue Eigenschaften, um die Angabe mehrerer Zertifikate zu ermöglichen: ClientSigningCertificate, ClientEncryptingCertificate, ServiceSigningCertificate und ServiceEncryptingCertificate. Überschreiben Sie auch die CreateSecurityTokenManager-Methode, damit eine Instanz der im nächsten Schritt eingerichteten benutzerdefinierten ClientCredentialsSecurityTokenManager-Klasse zurückgegeben wird.

  2. Definieren Sie einen neuen Clientsicherheitstoken-Manager, der von der ClientCredentialsSecurityTokenManager-Klasse erbt. Überschreiben Sie die CreateSecurityTokenProvider-Methode, um einen entsprechenden Sicherheitstokenanbieter zu erstellen. Der requirement-Parameter SecurityTokenRequirement) stellt die Nachrichtenrichtung und die Schlüsselverwendung zur Verfügung.

  3. Definieren Sie eine neue Dienstanmeldeinformationen-Klasse, die von der ServiceCredentials-Klasse erbt. Implementieren Sie vier neue Eigenschaften, um die Angabe mehrerer Zertifikate zu ermöglichen: ClientSigningCertificate, ClientEncryptingCertificate, ServiceSigningCertificate und ServiceEncryptingCertificate. Überschreiben Sie auch die CreateSecurityTokenManager-Methode, damit eine Instanz der im nächsten Schritt eingerichteten benutzerdefinierten ServiceCredentialsSecurityTokenManager-Klasse zurückgegeben wird.

  4. Definieren Sie einen neuen Dienstsicherheitstoken-Manager, der von der ServiceCredentialsSecurityTokenManager-Klasse erbt. Überschreiben Sie die CreateSecurityTokenProvider-Methode, um anhand der angegebenen Nachrichtenrichtung und Schlüsselverwendung einen entsprechenden Sicherheitstokenanbieter zu erstellen.

So verwenden Sie mehrere Zertifikate über den Client

  1. Erstellen Sie eine benutzerdefinierte Bindung. Das Sicherheitsbindungselement muss im Duplexmodus ausgeführt werden, damit für Anforderungen und Antworten verschiedene Sicherheitstokenanbieter zur Verfügung stehen können. Verwenden Sie dazu einen duplexfähigen Transport oder CompositeDuplexBindingElement, wie im folgenden Code veranschaulicht. Verknüpfen Sie den angepassten IdentityVerifier, der im nächsten Schritt definiert wird, mit dem Sicherheitsbindungselement. Ersetzen Sie die standardmäßigen Clientanmeldeinformationen mit den angepassten Clientanmeldeinformationen, die zuvor erstellt werden.

  2. Definieren Sie einen benutzerdefinierten IdentityVerifier. Der Dienst verfügt über mehrere Identitäten, da zum Verschlüsseln der Anforderung und zum Signieren der Antwort verschiedene Zertifikate verwendet werden.

    Tipp

    Im folgenden Beispiel führt die zur Verfügung gestellte benutzerdefinierte Identitätsprüfung zu Demonstrationszwecken keine Überprüfung der Endpunktidentität durch. Dies ist keine empfohlene Vorgehensweise für Produktionscode.

So verwenden Sie mehrere Zertifikate für den Dienst

  1. Erstellen Sie eine benutzerdefinierte Bindung. Das Sicherheitsbindungselement muss im Duplexmodus ausgeführt werden, damit für Anforderungen und Antworten verschiedene Sicherheitstokenanbieter zur Verfügung stehen können. Verwenden Sie dazu ebenso wie mit dem Client einen duplexfähigen Transport oder CompositeDuplexBindingElement, wie im folgenden Code veranschaulicht. Ersetzen Sie die standardmäßigen Dienstanmeldeinformationen mit den angepassten Dienstanmeldeinformationen, die zuvor erstellt werden.

Siehe auch

Referenz

ClientCredentials
ServiceCredentials
ClientCredentialsSecurityTokenManager
ServiceCredentialsSecurityTokenManager
IdentityVerifier

Konzepte

Gewusst wie: Erstellen von benutzerdefinierten Client- und Dienstanmeldeinformationen