Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Transportsicherheitsmechanismen in Windows Communication Foundation (WCF) hängen von der verwendeten Bindung und dem Transport ab. Wenn Sie beispielsweise die WSHttpBinding Klasse verwenden, ist der Transport HTTP, und der primäre Mechanismus zum Sichern des Transports ist Secure Sockets Layer (SSL) über HTTP, häufig als HTTPS bezeichnet. In diesem Thema werden die wichtigsten Transportsicherheitsmechanismen erläutert, die in den vom WCF-System bereitgestellten Bindungen verwendet werden.
Hinweis
Wenn SSL-Sicherheit mit .NET Framework 3.5 und höher verwendet wird, verwendet ein WCF-Client sowohl die Zwischenzertifikate im Zertifikatspeicher als auch die während der SSL-Aushandlung empfangenen Zwischenzertifikate, um die Zertifikatskettenüberprüfung für das Zertifikat des Diensts durchzuführen. .NET Framework 3.0 verwendet nur die im lokalen Zertifikatspeicher installierten Zwischenzertifikate.
Warnung
Wenn die Transportsicherheit verwendet wird, kann die Thread.CurrentPrincipal-Eigenschaft überschrieben werden. Um zu verhindern, dass dies geschieht, legen Sie folgendes ServiceAuthorizationBehavior.PrincipalPermissionMode fest:PrincipalPermissionMode.None ServiceAuthorizationBehavior ist ein Dienstverhalten, das für die Dienstbeschreibung festgelegt werden kann.
BasicHttpBinding
Standardmäßig stellt die BasicHttpBinding Klasse keine Sicherheit bereit. Diese Bindung wurde für die Interoperabilität mit Webdienstanbietern entwickelt, die keine Sicherheit implementieren. Sie können jedoch die Sicherheit aktivieren, indem Sie die Mode Eigenschaft auf einen beliebigen Wert mit Ausnahme Nonefestlegen. Um die Transportsicherheit zu aktivieren, legen Sie die Eigenschaft auf Transport.
Interoperabilität mit IIS
Die BasicHttpBinding Klasse wird in erster Linie verwendet, um mit vorhandenen Webdiensten zu arbeiten, und viele dieser Dienste werden von Internetinformationsdienste (INTERNET Information Services, IIS) gehostet. Folglich ist die Transportsicherheit für diese Bindung für eine nahtlose Interoperabilität mit IIS-Websites konzipiert. Dazu legen Sie den Sicherheitsmodus fest Transport und legen dann den Clientanmeldeinformationstyp fest. Die Werte für die Anmeldeinformationstypen entsprechen den IIS-Verzeichnissicherheitsmechanismen. Der folgende Code zeigt den Modus, der festgelegt wird, und den Anmeldedaten-Typ, 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.
Grundlegend
Dies entspricht der Standardauthentifizierungsmethode in IIS. Bei Verwendung dieses Modus muss der IIS-Server mit Windows-Benutzerkonten und entsprechenden NTFS-Dateisystemberechtigungen konfiguriert werden. 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 die Möglichkeit, dass Clients sich mit einem Zertifikat anmelden müssen. Das Feature ermöglicht IIS auch das Zuordnen eines Clientzertifikats zu einem Windows-Konto. 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.
Zusammenfassung
Die Digestauthentifizierung ähnelt der Standardauthentifizierung, bietet aber den Vorteil, dass die Anmeldeinformationen als Hash gesendet werden, anstatt in Klartext. Weitere Informationen zu IIS 6.0 finden Sie unter Digestauthentifizierung in IIS 6.0. Weitere Informationen zu IIS 7.0 finden Sie unter Configure Digest Authentication (IIS 7).
Fenster
Dies entspricht der integrierten Windows-Authentifizierung in IIS. Wenn dieser Wert auf diesen Wert festgelegt ist, wird erwartet, dass der Server auch in einer Windows-Domäne vorhanden ist, die das Kerberos-Protokoll als Domänencontroller verwendet. Wenn sich der Server nicht in einer Kerberos-gesicherten Domäne befindet oder wenn das Kerberos-System fehlschlägt, können Sie den im nächsten Abschnitt beschriebenen NT LAN Manager -Wert (NTLM) 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, wenn das Kerberos-Protokoll fehlschlägt. Weitere Informationen zum Konfigurieren von IIS in IIS 6.0 finden Sie unter Erzwingen der NTLM-Authentifizierung. Für IIS 7.0 enthält die Windows-Authentifizierung die NTLM-Authentifizierung. Weitere Informationen finden Sie unter Konfigurieren von Serverzertifikaten in IIS 7.
WsHttpBinding
Die WSHttpBinding Klasse wurde für die Interoperabilität mit Diensten entwickelt, die WS-*-Spezifikationen implementieren. Die Transportsicherheit für diese Bindung ist Secure Sockets Layer (SSL) über HTTP oder HTTPS. Um eine WCF-Anwendung zu erstellen, die SSL verwendet, verwenden Sie IIS, um die Anwendung zu hosten. Wenn Sie eine selbst gehostete Anwendung erstellen, verwenden Sie alternativ das HttpCfg.exe Tool, um ein X.509-Zertifikat an einen bestimmten Port auf einem Computer zu binden. Die Portnummer wird als Teil der WCF-Anwendung als Endpunktadresse angegeben. Bei Verwendung des Transportmodus muss die Endpunktadresse das HTTPS-Protokoll enthalten, oder eine Ausnahme wird zur Laufzeit ausgelöst. Weitere Informationen finden Sie unter HTTP-Transportsicherheit.
Legen Sie für die Clientauthentifizierung die ClientCredentialType Eigenschaft der HttpTransportSecurity Klasse auf einen der HttpClientCredentialType Enumerationswerte fest. Die Enumerationswerte für BasicHttpBinding sind identisch mit den Clientanmeldeinformationstypen und sind so konzipiert, dass sie mit IIS-Services gehostet werden.
Das folgende Beispiel zeigt die Bindung, die mit einem Client-Anmeldedatentyp von Windows verwendet wird.
// 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 nur Sicherheit auf Nachrichtenebene und keine Sicherheit auf Transportebene.
NetTcpBinding
Die NetTcpBinding Klasse verwendet TCP für den Nachrichtentransport. Sicherheit für den Transportmodus wird durch implementieren von TLS (Transport Layer Security) über TCP bereitgestellt. Die TLS-Implementierung wird vom Betriebssystem bereitgestellt.
Sie können auch den Anmeldeinformationstyp des Clients angeben, indem Sie die ClientCredentialType Eigenschaft der TcpTransportSecurity Klasse auf einen der TcpClientCredentialType Werte festlegen, wie im folgenden Code gezeigt.
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
Kunde
Auf dem Client müssen Sie ein Zertifikat mithilfe der SetCertificate Methode der X509CertificateInitiatorClientCredential Klasse 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")
Alternativ können Sie das Zertifikat in der Konfiguration des Clients mithilfe eines <ClientCredentials-Elements> im Abschnitt "Verhalten" angeben.
<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 maschinelle Kommunikation konzipiert, d. h. für Prozesse, die auf demselben Computer ausgeführt werden, obwohl benannte Rohrkanäle zwischen zwei Computern im selben Netzwerk erstellt werden können. Diese Bindung bietet nur Sicherheit auf Transportebene. Beim Erstellen von Anwendungen mit dieser Bindung müssen die Endpunktadressen "net.pipe" als Protokoll der Endpunktadresse enthalten.
WSFederationHttpBinding
Bei Verwendung der Transportsicherheit verwendet diese Bindung SSL über HTTP, das als HTTPS mit einem ausgestellten Token (TransportWithMessageCredential) bezeichnet wird. Weitere Informationen zu Verbundanwendungen finden Sie unter "Partnerverbund" und "Ausgestellte Token".
NetPeerTcpBinding
Die NetPeerTcpBinding Klasse ist ein sicherer Transport, der für eine effiziente Kommunikation mithilfe der Peer-to-Peer-Netzwerkfunktion konzipiert ist. Wie durch den Namen der Klasse und 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-Netzwerk.
MsmqIntegrationBinding und NetMsmqBinding
Eine vollständige Erläuterung der Transportsicherheit mit Message Queuing (früher MSMQ genannt) finden Sie unter Sichern von Nachrichten mithilfe von Transportsicherheit.