Übersicht über die Transportsicherheit

Transportsicherheitsmechanismen in Windows Communication Foundation (WCF) hängen von der Bindung und dem verwendeten Transport ab. Z. B. bei Verwendung der WSHttpBinding -Klasse, der Transport ist 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 Sicherheitsmechanismen beschrieben, 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, verwenden WCF-Clients später zur Validierung des Dienstzertifikats mittels einer Zertifikatskette sowohl die Zwischenzertifikate aus dem lokalen Zertifikatspeicher als auch die Zwischenzertifikate, die sie im Rahmen der SSL-Verhandlung empfangen haben. Bei .NET Framework 3.0 werden nur die im lokalen Zertifikatspeicher installierten Zwischenzertifikate verwendet.

Warnung

Wenn transportsicherheit verwendet wird, die <xref:System.Treading.Thread.CurrentPrincipal%2A> -Eigenschaft kann überschrieben werden. Um dies zu verhindern legen die <xref:System.ServiceModel.Description.ServiceAuthorizationBehavior.PrincipalPermission%2A> auf None. ServiceAuthorizationBehavior ist ein Dienstverhalten, die für die dienstbeschreibung festgelegt werden kann.

BasicHttpBinding

In der Standardeinstellung die BasicHttpBinding -Klasse keine Sicherheit geboten. Diese Bindung ist für die Interoperabilität mit Webdienstanbietern ausgelegt, die keine Sicherheit implementieren. Sie können jedoch für die Sicherheit wechseln, durch Festlegen der Mode -Eigenschaft auf einen beliebigen Wert außer BasicHttpSecurityMode. Um transportsicherheit zu aktivieren, legen Sie die Eigenschaft auf BasicHttpSecurityMode.

Interoperieren mit IIS

Die BasicHttpBinding Klasse wird hauptsächlich für die Interoperabilität mit vorhandenen Webdiensten und viele dieser Dienste von Internet Information Services (IIS) gehostet werden. Deshalb ist die Transportsicherheit für diese Bindung auf die nahtlose Interoperation mit IIS-Websites ausgerichtet. Dies geschieht durch Festlegen des Sicherheitsmodus auf BasicHttpSecurityMode festlegen und anschließend die Client-Anmeldeinformationstyp. 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;

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.

Standard

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 finden Sie unterIIS 6.0, finden Sie unter Aktivieren der Standardauthentifizierung und Konfigurieren des Bereichsnamens. Weitere Informationen finden Sie unterIIS 7.0, finden Sie unter IIS 7.0 Beta: Konfigurieren der Standardauthentifizierung.

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 finden Sie unterIIS 6.0, finden Sie unter Aktivieren von Clientzertifikaten in IIS 6.0. Weitere Informationen finden Sie unterIIS 7.0, finden Sie unter IIS 7.0 Beta: Konfigurieren von Serverzertifikaten in IIS 7.0.

Hashwert

Die Hashwertauthentifizierung ähnelt der Standardauthentifizierung, bietet jedoch den Vorteil, die Anmeldeinformationen als Hash zu senden und nicht als Klartext. Weitere Informationen finden Sie unterIIS 6.0, finden Sie unter die Digestauthentifizierung in IIS 6.0. Weitere Informationen finden Sie unterIIS 7.0, finden Sie unter IIS 7.0 Beta: Konfigurieren der Digestauthentifizierung.

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 finden Sie unterIIS 6.0, finden Sie unter integrierte Windows-Authentifizierung in IIS 6.0. Weitere Informationen finden Sie unterIIS 7.0, finden Sie unter IIS 7.0 Beta: Konfigurieren von Serverzertifikaten in IIS 7.0.

NTLM

Dadurch kann der Server NTLM für die Authentifizierung verwenden, falls das Kerberos-Protokoll fehlschlägt. Weitere Informationen finden Sie unterKonfigurieren von IIS in IIS 6.0, finden Sie unter Erzwingen der NTLM-Authentifizierung. Im Falle von IIS 7.0 schließt die Windows-Authentifizierung die NTLM-Authentifizierung ein. Weitere Informationen finden Sie unterIIS 7.0 Beta: Konfigurieren von Serverzertifikaten in IIS 7.0.

WsHttpBinding

Die WSHttpBinding Klasse dient zur Zusammenarbeit mit Diensten, die Implementierung von WS-* Spezifikationen. Die Transportsicherheit für diese Bindung ist SSL (Secure Sockets Layer) ü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, können Sie mit dem Tool HttpCfg.exe ein X.509-Zertifikat an einen bestimmten Anschluss eines Computers binden. Die Anschlussnummer wird als Teil 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 unterHTTP-Transportsicherheit.

Legen Sie für die Clientauthentifizierung der ClientCredentialType Eigenschaft der HttpTransportSecurity -Klasse auf einen der der HttpClientCredentialType -Enumerationswerte. Die Enumerationswerte sind identisch mit den Typen von Clientanmeldeinformationen für BasicHttpBinding und für die Verwendung mit IIS-Dienste gehostet 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 die Client Anmeldeinformationstyp angeben, durch Festlegen der ClientCredentialType Eigenschaft der TcpTransportSecurity -Klasse auf einen der der TcpClientCredentialType Werte, 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

Client

Auf dem Client müssen Sie angeben, ein Zertifikat mithilfe der SetCertificate Methode der X509CertificateInitiatorClientCredential Klasse.

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 finden Sie unterZertifikate, 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 angeben mithilfe einer <> > Element im verhaltensabschnitt.

<behaviors>  
  <behavior>  
   <clientCredentials>  
     <clientCertificate findValue= "101010101010101010101010101010000000000"   
      storeLocation="LocalMachine" storeName="My"   
      X509FindType="FindByThumbPrint"/>  
     </clientCertificate>  
   </clientCredentials>  
 </behavior>  
</behaviors>    

NetNamedPipeBinding

Die NetNamedPipeBinding -Klasse kann für die effiziente Kommunikation; d. h. für Prozesse, die auf dem gleichen Computer ausgeführt wird, obwohl die named Pipe-Kanäle kann erstellt werden zwischen zwei Computern im selben Netzwerk. 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, verwendet diese Bindung SSL über HTTP, bekannt als HTTPS mit einem ausgestellten Token (WSFederationHttpSecurityMode). Weitere Informationen finden Sie unterverbundanwendungen finden Sie unter Verbund und ausgestellte Token.

NetPeerTcpBinding

Die NetPeerTcpBinding Klasse ist ein sicherer Transport, die für eine effiziente Kommunikation, die die Peer-to-Peer-Netzwerkfunktion entwickelt wurde. 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 finden Sie unterdie Peer-to-Peer-Funktion finden Sie unter Peer-zu-Peer-Netzwerk.

MsmqIntegrationBinding und NetMsmqBinding

Eine vollständige Erläuterung der transportsicherheit mit Message Queuing (früher als MSMQ bezeichnet), finden Sie unter Sichern von Nachrichten mit Transportsicherheit.

Siehe auch

Programmieren der WCF-Sicherheit