Sicherheit bei verteilten Anwendungen
Die Sicherheit wird in Windows Communication Foundation (WCF) in drei funktionelle Hauptbereiche unterteilt: Übertragungssicherheit, Zugriffssteuerung und Überwachung. Durch die Übertragungssicherheit werden Integrität, Vertraulichkeit und Authentifizierung bereitgestellt. Die Übertragungssicherheit wird durch eine der folgenden Funktionen bereitgestellt: Transportsicherheit, Nachrichtensicherheit oder TransportWithMessageCredential
.
Eine Übersicht über die WCF-Nachrichtensicherheit finden Sie unter Übersicht über die Sicherheit. Weitere Informationen zu den anderen beiden Aspekten der WCF-Sicherheit finden Sie unter Autorisierung und Überwachung.
Szenarien für die Übertragungssicherheit
Zu den üblichen Szenarien, in denen die WCF-Übertragungssicherheit eingesetzt wird, gehören folgende Situationen:
Sichere Übertragung mittels Windows: Ein WCF-Client und ein WCF-Dienst werden in einer Windows-Domäne (oder einer Windows-Gesamtstruktur) bereitgestellt. Da die Nachrichten persönliche Daten enthalten, sind unter anderem eine gegenseitige Authentifizierung von Client und Dienst sowie die Integrität und Vertraulichkeit der Nachrichten erforderlich. Darüber hinaus muss belegt werden, dass eine bestimmte Transaktion stattgefunden hat. So sollten beim Empfänger der Nachricht zum Beispiel Signaturinformationen aufgezeichnet werden.
Sichere Übertragung mittels
UserName
und HTTPS: Der WCF-Client und der WCF-Dienst müssen so entwickelt werden, dass sie über das Internet kommunizieren können. Die Clientanmeldeinformationen werden anhand einer Datenbank mit Benutzername-/Kennwort-Paaren authentifiziert. Der Dienst wird unter einer HTTPS-Adresse mithilfe eines vertrauenswürdigen SSL-Zertifikats (SSL = Secure Sockets Layer) bereitgestellt. Da die Nachrichten über das Internet gesendet werden, müssen sich Client und Dienst gegenseitig authentifizieren und die Integrität und Vertraulichkeit der Nachrichten muss während der Übertragung gewahrt werden.Sichere Übertragung mittels Zertifikaten: Der WCF-Client und der WCF-Dienst müssen so entwickelt werden, dass sie über das öffentliche Internet kommunizieren können. Client und Dienst verfügen beide über Zertifikate, mit denen die Nachrichten geschützt werden können. Client und Dienst verwenden das Internet, um miteinander zu kommunizieren und Transaktionen von hohem Wert auszuführen, für die Nachrichtenintegrität, Vertraulichkeit und eine gegenseitige Authentifizierung erforderlich sind.
Integrität, Vertraulichkeit und Authentifizierung
Die drei Funktionen Integrität, Vertraulichkeit und Authentifizierung ergeben zusammen die Übertragungssicherheit. Durch die Übertragungssicherheit werden die Funktionen bereitgestellt, die Ihnen dabei helfen, die Bedrohungen für eine verteilte Anwendung zu mindern. In der folgenden Tabelle werden kurz die drei Funktionen beschrieben, aus denen sich die Übertragungssicherheit zusammensetzt.
Funktion | BESCHREIBUNG |
---|---|
Integrität | Integrität ist die Zusicherung, dass Daten vollständig und richtig sind, insbesondere nachdem sie von einem Punkt an einen anderen gesendet und dabei möglicherweise von vielen Parteien gelesen wurden. Die Integrität muss gewahrt werden, um eine Manipulation der Daten zu vermeiden. Dieses Ziel wird in der Regel durch das digitale Signieren von Nachrichten erreicht. |
Vertraulichkeit | Vertraulichkeit ist die Zusicherung, dass eine Nachricht nur von den beabsichtigten Empfänger*innen gelesen wird. So müssen zum Beispiel Kreditkartennummern, die über das Internet gesendet werden, vertraulich behandelt werden. Vertraulichkeit wird häufig durch Verschlüsselung der Daten mit einem Schema aus öffentlichem und privatem Schlüssel bereitgestellt. |
Authentifizierung | Authentifizierung ist die Überprüfung einer beanspruchten Identität. So muss beispielsweise bei Bankkonten gewährleistet sein, dass nur die tatsächlichen Kontoinhaber Geld abheben können. Es gibt viele Möglichkeiten, eine Authentifizierung bereitzustellen. Eine häufig verwendete Methode ist das Benutzer-/Kennwortsystem. Eine andere ist die Verwendung eines von einem Drittanbieter bereitgestellten X.509-Zertifikats. |
Sicherheitsmodi
In WCF gibt es mehrere Modi für die Übertragungssicherheit, die in der folgenden Tabelle beschrieben werden.
Mode | BESCHREIBUNG |
---|---|
Keine | Auf Transport- bzw. Nachrichtenebene wird keine Sicherheit bereitgestellt. Standardmäßig wird dieser Modus im Rahmen der vordefinierten Bindungen nur beim <basicHttpBinding>-Element bzw. (bei Verwendung von Code) bei der BasicHttpBinding-Klasse verwendet. |
Transport | Es wird ein sicherer Transport wie HTTPS zur Gewährleistung von Integrität, Vertraulichkeit und gegenseitiger Authentifizierung verwendet. |
`Message` | Es wird die SOAP-Nachrichtensicherheit zur Gewährleistung von Integrität, Vertraulichkeit und gegenseitiger Authentifizierung verwendet. SOAP-Nachrichten werden gemäß den Standards für die WS-Sicherheit geschützt. |
Gemischter Modus | Es wird die Transportsicherheit zur Gewährleistung von Integrität und Vertraulichkeit sowie für die Serverauthentifizierung verwendet. Für die Clientauthentifizierung wird die Nachrichtensicherheit (WS-Sicherheit und andere Standards) eingesetzt. (Der Enumerationswert für diesen Modus ist TransportWithMessageCredential .) |
Beide | Schutz und Authentifizierung finden auf beiden Ebenen statt. Dieser Modus ist nur im <netMsmqBinding>-Element verfügbar. |
Identitätsnachweis (Anmeldeinformationen) und Übertragungssicherheit
Bei den Anmeldeinformationen (dem Identitätsnachweis) handelt es sich um Daten, mit denen eine beanspruchte Identität bzw. beanspruchte Befähigungen belegt werden. Das Vorlegen eines Identitätsnachweises umfasst das Angeben der Daten und den Nachweis, dass sich die Daten rechtmäßig im Besitz des Inhabers befinden. WCF unterstützt verschiedene Typen von Anmeldeinformationen auf der Datentransport- und Nachrichtensicherheitsebene. Sie können für eine WCF-Bindung den Typ der Anmeldeinformationen angeben.
In vielen Ländern bzw. Regionen ist der Führerschein ein Beispiel für einen Identitätsnachweis. Ein Führerschein enthält Daten, die die Identität und Befähigungen einer Person belegen. Der rechtmäßige Besitz wird mithilfe eines Bilds des Inhabers nachgewiesen. Der Führerschein wird von einer vertrauenswürdigen Stelle ausgegeben, in der Regel von einer dafür zuständigen Regierungsbehörde. Der Führerschein wird eingeschweißt und enthält ggf. ein Hologramm, wodurch sichergestellt wird, dass er nicht manipuliert oder gefälscht wurde.
Nehmen Sie als Beispiel zwei Typen von Anmeldeinformationen, die in WCF unterstützt werden: der Identitätsnachweis mittels Benutzername und Zertifikat (X.509).
Beim Identitätsnachweis mittels Benutzername stellt der Benutzername die beanspruchte Identität dar, und das Kennwort ist der Nachweis des rechtmäßigen Besitzes. Die vertrauenswürdige Stelle ist in diesem Fall das System, das den Benutzernamen und das Kennwort überprüft.
Beim Identitätsnachweis mittels Zertifikat können die beanspruchte Identität bzw. die beanspruchten Befähigungen durch den Antragstellernamen, den alternativen Antragstellernamen oder spezielle Felder im Zertifikat belegt werden. Der Nachweis des rechtmäßigen Besitzes der Daten erfolgt durch eine Signatur, die mit dem zugehörigen privaten Schlüssel erzeugt wird.
Weitere Informationen zum Programmieren der Übertragungssicherheit und zum Angeben von Anmeldeinformationen finden Sie unter Bindungen und Sicherheits und Sicherheitsverhalten.
Arten von Clientanmeldeinformationen bei der Transportsicherheit
In der folgenden Tabelle finden Sie die möglichen Werte, die Sie beim Erstellen einer Anwendung verwenden können, die die Übertragungssicherheit nutzt. Sie können diese Werte entweder im Code oder in Bindungseinstellungen festlegen.
Einstellung | Beschreibung |
---|---|
Keine | Gibt an, dass der Client keine Anmeldeinformationen präsentieren muss. Dies führt zur Verwendung eines anonymen Clients. |
Basic | Gibt die Standardauthentifizierung an. Weitere Informationen finden Sie unter RFC 2617: HTTP Authentication: Basic and Digest Authentication (HTTP-Authentifizierung: Standard- und Digestauthentifizierung). |
Digest | Gibt die Digestauthentifizierung an. Weitere Informationen finden Sie unter RFC 2617: HTTP Authentication: Basic and Digest Authentication (HTTP-Authentifizierung: Standard- und Digestauthentifizierung). |
Ntlm | Gibt die Windows-Authentifizierung mit SSPI-Aushandlung auf einer Windows-Domäne an. Die SSPI-Aushandlung führt dazu, dass entweder das Kerberos-Protokoll oder NT LanMan (NTLM) verwendet wird. |
Windows | Gibt die Windows-Authentifizierung mit SSPI auf einer Windows-Domäne an. SSPI wählt entweder das Kerberos-Protokoll oder NTLM als Authentifizierungsdienst aus. Zuerst wird das Kerberos-Protokoll angewendet, wenn dies scheitert, wird NTLM verwendet. |
Zertifikat | Führt die Clientauthentifizierung mit einem Zertifikat (in der Regel X.509) durch. |
Typen von Nachrichtenclient-Anmeldeinformationen
In der folgenden Tabelle finden Sie die möglichen Werte, die Sie beim Erstellen einer Anwendung verwenden können, die die Nachrichtensicherheit nutzt. Sie können diese Werte entweder im Code oder in Bindungseinstellungen festlegen.
Einstellung | Beschreibung |
---|---|
Keine | Ermöglicht dem Dienst die Interaktion mit anonymen Clients. |
Windows | Ermöglicht den SOAP-Nachrichtenaustausch im Rahmen des authentifizierten Kontexts von Windows-Anmeldeinformationen. Es wird mittels SSPI-Aushandlung entweder das Kerberos-Protokoll oder NTLM als Authentifizierungsdienst ausgewählt. |
Username | Ermöglicht es dem Dienst zu fordern, dass sich der Client per Benutzername authentifiziert. Beachten Sie, dass in WCF keine kryptografischen Vorgänge mit dem Benutzernamen zulässig sind, also z. B. das Generieren einer Signatur oder das Verschlüsseln von Daten. WCF erzwingt, dass der Datentransport geschützt wird, wenn als Anmeldeinformationen der Benutzername verwendet wird. |
Zertifikat | Ermöglicht dem Dienst, die Forderung zu stellen, dass der Client über ein Zertifikat authentifiziert werden muss. |
CardSpace | Ermöglicht dem Dienst die Forderung, dass Clients über einen CardSpace authentifiziert werden müssen. |
Programmieren von Anmeldeinformationen
Bei allen Formen von Clientanmeldeinformationen haben Sie im WCF-Programmiermodell die Möglichkeit, die Werte und Validierungen für die Anmeldeinformationen mithilfe von Dienstverhalten und von Kanalverhalten festzulegen.
Die Sicherheit in WCF verwendet zwei Typen von Anmeldeinformationen: Verhalten für Dienstanmeldeinformationen und Verhalten für Kanalanmeldeinformationen. Durch die Anmeldeinformationsverhalten in WCF werden die eigentlichen Daten angegeben, das heißt die Anmeldeinformationen, mit denen die durch Bindungen ausgedrückten Sicherheitsvoraussetzungen erfüllt werden. In WCF ist eine Clientklasse die Runtimekomponente, über die die Umsetzung zwischen Vorgangsaufruf und Nachrichten erfolgt. Alle Clients erben von der ClientBase<TChannel>-Klasse. Über die ClientCredentials-Eigenschaft der Basisklasse können Sie verschiedene Werte für die Clientanmeldeinformationen angeben.
In WCF sind Dienstverhalten Attribute, die auf die Klasse angewandt werden, die einen Dienstvertrag (Schnittstelle) implementiert, um den Dienst per Code zu steuern. Über die ServiceCredentials-Klasse können Sie Zertifikate für Dienstanmeldeinformationen und Einstellungen für die Clientvalidierung für verschiedene Arten von Clientanmeldeinformationen festlegen.
Aushandlungsmodell für die Nachrichtensicherheit
Im Modus für die Nachrichtensicherheit können Sie die Übertragungssicherheit so ausüben, dass die Dienstanmeldeinformationen nach dem Out-of-Band-System auf dem Client konfiguriert werden. Wenn Sie beispielsweise ein im Windows-Zertifikatspeicher gespeichertes Zertifikat verwenden, müssen Sie ein Tool wie das MMC-Snap-In (Microsoft Management Console) verwenden.
Im Modus für die Nachrichtensicherheit können Sie die Übertragungssicherheit auch so ausüben, dass im Zuge einer anfänglichen Aushandlung ein Austausch der Dienstanmeldeinformationen mit dem Client erfolgt. Legen Sie die NegotiateServiceCredential-Eigenschaft auf true
fest, um die Aushandlung zu aktivieren.