Übersicht über die Transportsicherheit
Transportsicherheitsmechanismen in Windows Communication Foundation (WCF) sind abhängig von der verwendeten Bindung und dem verwendeten Transport. Wenn Sie z. B. die WSHttpBinding-Klasse verwenden, lautet der Transportmechanismus HTTP, und der primäre Mechanismus zum Sichern des Transports ist Secure Sockets Layer (SSL) über HTTP, allgemein als HTTPS bezeichnet. In diesem Thema werden die wichtigsten Transportsicherheitsmechanismen erläutert, die für die vom WCF-System bereitgestellten Bindungen verwendet werden.
Hinweis
Wenn SSL-Sicherheit in Verbindung mit .NET Framework 3.5 und höher verwendet wird, verwendet ein WCF-Client zur Validierung des Dienstzertifikats mittels einer Zertifikatskette sowohl die Zwischenzertifikate aus dem lokalen Zertifikatspeicher als auch die Zwischenzertifikate, die er im Rahmen der SSL-Aushandlung empfangen hat. Bei .NET Framework 3.0 werden nur die im lokalen Zertifikatspeicher installierten Zwischenzertifikate verwendet.
Warnung
Wenn die Transportsicherheit verwendet wird, kann die Thread.CurrentPrincipal-Eigenschaft überschrieben werden. Um dies zu verhindern, legen Sie den ServiceAuthorizationBehavior.PrincipalPermissionMode auf PrincipalPermissionMode.None fest. ServiceAuthorizationBehavior ist ein Dienstverhalten, das für die Dienstbeschreibung festgelegt werden kann.
BasicHttpBinding
Die BasicHttpBinding-Klasse bietet standardmäßig keine Sicherheit. Diese Bindung ist für die Interoperabilität mit Webdienstanbietern ausgelegt, die keine Sicherheit implementieren. Sie können jedoch die Sicherheit aktivieren, indem Sie die Mode-Eigenschaft auf einen beliebigen Wert außer None festlegen. Wenn Sie die Transportsicherheit aktivieren möchten, legen Sie die Eigenschaft auf Transport fest.
Interoperieren mit IIS
Die BasicHttpBinding-Klasse wird hauptsächlich für die Interoperation mit bereits vorhandenen Webdiensten verwendet. Viele dieser Dienste werden von Internetinformationsdienste (IIS) gehostet. Deshalb ist die Transportsicherheit für diese Bindung auf die nahtlose Interoperation mit IIS-Websites ausgerichtet. Dies geschieht durch Festlegen des Sicherheitsmodus auf Transport und anschließendes Festlegen des Client-Anmeldeinformationstyps. Die Werte für die Anmeldeinformationstypen entsprechen den IIS-Verzeichnissicherheitsmechanismen. Der folgende Code zeigt den festgelegten Modus und einen Anmeldeinformationstyp, der auf Windows festgelegt ist. Sie können diese Konfiguration verwenden, wenn sich Client und Server in derselben Windows-Domäne befinden.
BasicHttpBinding b = new BasicHttpBinding();
b.Security.Mode = BasicHttpSecurityMode.Transport ;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Dim b As BasicHttpBinding = New BasicHttpBinding()
b.Security.Mode = BasicHttpSecurityMode.Transport
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
Oder in der Konfiguration:
<bindings>
<basicHttpBinding>
<binding name="SecurityByTransport">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
In den folgenden Abschnitten werden andere Client-Anmeldeinformationstypen erläutert.
Basic
Dies entspricht der Authentifizierungsmethode Standard in IIS. Wenn Sie diesen Modus verwenden, muss der IIS-Server mit Windows-Benutzerkonten und den entsprechenden NTFS-Dateisystemberechtigungen konfiguriert sein. Weitere Informationen zu IIS 6.0 finden Sie unter Aktivieren der Standardauthentifizierung und Konfigurieren des Bereichsnamens. Weitere Informationen zu IIS 7.0 finden Sie unter Konfigurieren der Standardauthentifizierung (IIS 7).
Zertifikat
IIS verfügt über eine Option, mit der sich die Clients mit einem Zertifikat anmelden müssen. Mit dieser Funktion können die Internetinformationsdienste auch einem Windows-Konto ein Clientzertifikat zuordnen. Weitere Informationen zu IIS 6.0 finden Sie unter Aktivieren von Clientzertifikaten in IIS 6.0. Weitere Informationen zu IIS 7.0 finden Sie unter Konfigurieren von Serverzertifikaten in IIS 7.
Digest
Die Hashwertauthentifizierung ähnelt der Standardauthentifizierung, bietet jedoch den Vorteil, die Anmeldeinformationen als Hash zu senden und nicht als Klartext. Weitere Informationen zu IIS 6.0 finden Sie unter Digestauthentifizierung in IIS 6.0. Weitere Informationen zu IIS 7.0 finden Sie unter Konfigurieren der Digestauthentifizierung (IIS 7).
Windows
Dies entspricht der integrierten Windows-Authentifizierungsmethode in IIS. Bei dieser Methode muss sich auch der Server in einer Windows-Domäne befinden, die das Kerberos-Protokoll als Domänencontroller verwendet. Falls sich der Server nicht in einer Kerberos-Domäne befindet oder falls das Kerberos-System fehlschlägt, können Sie den im nächsten Abschnitt beschriebenen NTLM-Wert verwenden. Weitere Informationen zu IIS 6.0 finden Sie unter Integrierte Windows-Authentifizierung in IIS 6.0. Weitere Informationen zu IIS 7.0 finden Sie unter Konfigurieren von Serverzertifikaten in IIS 7.
NTLM
Dadurch kann der Server NTLM für die Authentifizierung verwenden, falls das Kerberos-Protokoll fehlschlägt. Weitere Informationen zum Konfigurieren von IIS in IIS 6.0 finden Sie unter Erzwingen der NTLM-Authentifizierung. Bei IIS 7.0 enthält die Windows-Authentifizierung die NTLM-Authentifizierung. Weitere Informationen finden Sie unter Konfigurieren von Serverzertifikaten in IIS 7.0.
WsHttpBinding
Die WSHttpBinding-Klasse ist für die Zusammenarbeit mit Diensten vorgesehen, die WS-*-Spezifikationen implementieren. Die Transportsicherheit für diese Bindung ist SSL (Secure Sockets Layer) über HTTP oder HTTPS. Wenn Sie eine WCF-Anwendung erstellen möchten, die SSL verwendet, verwenden Sie IIS zum Hosten der Anwendung. Wenn Sie eine selbst gehostete Anwendung erstellen, können Sie mit dem Tool HttpCfg.exe ein X.509-Zertifikat an einen bestimmten Anschluss eines Computers binden. Die Anschlussnummer wird im Rahmen der WCF-Anwendung als Endpunktadresse angegeben. Bei Verwendung des Transportmodus muss die Endpunktadresse das HTTPS-Protokoll enthalten. Andernfalls wird zur Laufzeit eine Ausnahme ausgelöst. Weitere Informationen finden Sie unter HTTP-Transportsicherheit.
Legen Sie zur Clientauthentifizierung die ClientCredentialType-Eigenschaft der HttpTransportSecurity-Klasse auf einen der HttpClientCredentialType-Enumerationswerte fest. Die Enumerationswerte sind identisch mit den Client-Anmeldeinformationstypen für BasicHttpBinding und sind darauf ausgerichtet, mit IIS-Diensten gehostet zu werden.
Das folgende Beispiel zeigt die mit einem Client-Anmeldeinformationstyp von Windows verwendete Bindung.
// The code uses a shortcut to specify the security mode to Transport.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Transport);
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
' The code uses a shortcut to specify the security mode to Transport.
Dim b As WSHttpBinding = New WSHttpBinding(SecurityMode.Transport)
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
WSDualHttpBinding
Diese Bindung bietet lediglich Sicherheit auf Nachrichtenebene, nicht Sicherheit auf Transportebene.
NetTcpBinding
Die NetTcpBinding-Klasse verwendet TCP für den Nachrichtentransport. Die Sicherheit für den Transportmodus wird über die Implementierung von TLS über TCP bereitgestellt. Die TLS-Implementierung wird vom Betriebssystem bereitgestellt.
Sie können auch den Client-Anmeldeinformationstyp angeben, indem Sie die ClientCredentialType-Eigenschaft der TcpTransportSecurity-Klasse auf einen der TcpClientCredentialType-Werte festlegen, wie im folgenden Code dargestellt.
NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType =
TcpClientCredentialType.Certificate;
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
Client
Auf dem Client müssen Sie mit der SetCertificate-Methode der X509CertificateInitiatorClientCredential-Klasse ein Zertifikat angeben.
Hinweis
Wenn Sie die Windows-Sicherheit verwenden, ist kein Zertifikat erforderlich.
Der folgende Code verwendet den Fingerabdruck des Zertifikats, der es eindeutig identifiziert. Weitere Informationen zu Zertifikaten finden Sie unter Arbeiten mit Zertifikaten.
NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
EndpointAddress a = new EndpointAddress("net.tcp://contoso.com/TcpAddress");
ChannelFactory<ICalculator> cf = new ChannelFactory<ICalculator>(b, a);
cf.Credentials.ClientCertificate.SetCertificate(
StoreLocation.LocalMachine,
StoreName.My,
X509FindType.FindByThumbprint,
"0000000000000000000000000000000000000000");
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
Dim a As New EndpointAddress("net.tcp://contoso.com/TcpAddress")
Dim cf As ChannelFactory(Of ICalculator) = New ChannelFactory(Of ICalculator)(b, a)
cf.Credentials.ClientCertificate.SetCertificate( _
StoreLocation.LocalMachine, _
StoreName.My, _
X509FindType.FindByThumbprint, _
"0000000000000000000000000000000000000000")
Geben Sie alternativ das Zertifikat in der Clientkonfiguration mithilfe eines <clientCredentials>-Elements im Abschnitt „Verhalten“ an.
<behaviors>
<behavior>
<clientCredentials>
<clientCertificate findValue= "101010101010101010101010101010000000000"
storeLocation="LocalMachine" storeName="My"
X509FindType="FindByThumbPrint">
</clientCertificate>
</clientCredentials>
</behavior>
</behaviors>
NetNamedPipeBinding
Die NetNamedPipeBinding-Klasse ist für eine effiziente Kommunikation zwischen verschiedenen Computern ausgerichtet, d. h. für Prozesse, die auf demselben Computer ausgeführt werden, obwohl zwischen zwei Computern im selben Netzwerk Named Pipe-Kanäle erstellt werden können. Diese Bindung bietet lediglich Sicherheit auf Transportebene. Wenn Sie mit dieser Bindung Anwendungen erstellen, müssen die Endpunktadressen „net.pipe“ als Protokoll der Endpunktadresse enthalten.
WSFederationHttpBinding
Wenn Sie Transportsicherheit verwenden, erfolgt diese Bindung mit SSL über HTTP (als HTTPS bezeichnet) und einem ausgestellten Token (TransportWithMessageCredential). Weitere Informationen zu Verbundanwendungen finden Sie unter Partnerverbund und ausgestellte Token.
NetPeerTcpBinding
Die NetPeerTcpBinding-Klasse stellt einen sicheren Transportmechanismus dar, ausgerichtet auf eine effektive Kommunikation, die die Peer-to-Peer-Netzwerkfunktion verwendet. Wie anhand des Namens der Klasse und der Bindung angegeben, ist TCP das Protokoll. Wenn der Sicherheitsmodus auf Transport festgelegt ist, implementiert die Bindung TLS über TCP. Weitere Informationen zum Peer-to-Peer-Feature finden Sie unter Peer-to-Peer-Netzwerke.
MsmqIntegrationBinding und NetMsmqBinding
Eine vollständige Erläuterung der Transportsicherheit mit Message Queuing (früher als „MSMQ“ bezeichnet) finden Sie unter Sichern von Nachrichten mithilfe von Transportsicherheit.