Übersicht über die TransportsicherheitTransport Security Overview

Transportsicherheitsmechanismen in Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) hängen von der Bindung und dem verwendeten Transport ab.Transport security mechanisms in Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) depend on the binding and transport being used. 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.For example, when using the WSHttpBinding class, the transport is HTTP, and the primary mechanism for securing the transport is Secure Sockets Layer (SSL) over HTTP, commonly called HTTPS. In diesem Thema werden die wichtigsten Sicherheitsmechanismen beschrieben, die für die vom WCFWCF-System bereitgestellten Bindungen verwendet werden.This topic discusses the major transport security mechanisms used in the WCFWCF system-provided bindings.

Hinweis

Wenn SSL-Sicherheit in Verbindung mit .NET Framework 3.5 und höher verwendet wird, verwenden WCFWCF-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.When SSL security is used with .NET Framework 3.5 and later an WCFWCF client uses both the intermediate certificates in its certificate store and the intermediate certificates received during SSL negotiation to perform certificate chain validation on the service's certificate. Bei .NET Framework 3.0 werden nur die im lokalen Zertifikatspeicher installierten Zwischenzertifikate verwendet..NET Framework 3.0 only uses the intermediate certificates installed in the local certificate store.

Warnung

Wenn transportsicherheit verwendet wird, die CurrentPrincipal Eigenschaft möglicherweise überschrieben.When transport security is used, the CurrentPrincipal property may be overwritten. Dies verhindern, legen die PrincipalPermission auf None.To prevent this from happening set the PrincipalPermission to None. ServiceAuthorizationBehavior ist ein Dienstverhalten, das für die Dienstbeschreibung festgelegt werden kann.ServiceAuthorizationBehavior is a service behavior that can be set on the service description.

BasicHttpBindingBasicHttpBinding

Die BasicHttpBinding-Klasse bietet standardmäßig keine Sicherheit.By default, the BasicHttpBinding class does not provide security. Diese Bindung ist für die Interoperabilität mit Webdienstanbietern ausgelegt, die keine Sicherheit implementieren.This binding is designed for interoperability with Web service providers that do not implement security. Sie können jedoch die Sicherheit aktivieren, indem Sie die Mode-Eigenschaft auf einen beliebigen Wert außer None festlegen.However, you can switch on security by setting the Mode property to any value except None. Wenn Sie die Transportsicherheit aktivieren möchten, legen Sie die Eigenschaft auf Transport fest.To enable transport security, set the property to Transport.

Interoperieren mit IISInteroperation with IIS

Die BasicHttpBinding-Klasse wird hauptsächlich für die Interoperation mit bereits vorhandenen Webdiensten verwendet. Viele dieser Dienste werden von Internetinformationsdienste (IIS) gehostet.The BasicHttpBinding class is primarily used to interoperate with existing Web services, and many of those services are hosted by Internet Information Services (IIS). Deshalb ist die Transportsicherheit für diese Bindung auf die nahtlose Interoperation mit IIS-Websites ausgerichtet.Consequently, the transport security for this binding is designed for seamless interoperation with IIS sites. Dies geschieht durch Festlegen des Sicherheitsmodus auf Transport und anschließendes Festlegen des Client-Anmeldeinformationstyps.This is done by setting the security mode to Transport and then setting the client credential type. Die Werte für die Anmeldeinformationstypen entsprechen den IIS-Verzeichnissicherheitsmechanismen.The credential type values correspond to IIS directory security mechanisms. Der folgende Code zeigt den festgelegten Modus und einen Anmeldeinformationstyp, der auf Windows festgelegt ist.The following code shows the mode being set and the credential type set to Windows. Sie können diese Konfiguration verwenden, wenn sich Client und Server in derselben Windows-Domäne befinden.You can use this configuration when both client and server are on the same Windows domain.

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:Or, in configuration:

<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.The following sections discuss other client credential types.

StandardBasic

Dies entspricht der Authentifizierungsmethode Standard in IIS.This corresponds to the Basic authentication method in IIS. Wenn Sie diesen Modus verwenden, muss der IIS-Server mit Windows-Benutzerkonten und den entsprechenden NTFS-Dateisystemberechtigungen konfiguriert sein.When using this mode, the IIS server must be configured with Windows user accounts and appropriate NTFS file system permissions. Weitere Informationen finden Sie unterFor more information aboutIIS 6.0IIS 6.0, finden Sie unter Standardauthentifizierung aktivieren und Konfigurieren des Bereichsnamens. IIS 6.0IIS 6.0, see Enabling Basic Authentication and Configuring the Realm Name. Weitere Informationen finden Sie unterFor more information aboutIIS 7.0IIS 7.0, finden Sie unter IIS 7.0 Beta: Konfigurieren der Standardauthentifizierung. IIS 7.0IIS 7.0, see IIS 7.0 Beta: Configure Basic Authentication.

ZertifikatCertificate

IIS verfügt über eine Option, mit der sich die Clients mit einem Zertifikat anmelden müssen.IIS has an option to require clients to log on with a certificate. Mit dieser Funktion können die Internetinformationsdienste auch einem Windows-Konto ein Clientzertifikat zuordnen.The feature also enables IIS to map a client certificate to a Windows account. Weitere Informationen finden Sie unterFor more information aboutIIS 6.0IIS 6.0, finden Sie unter Aktivieren von Clientzertifikaten in IIS 6.0. IIS 6.0IIS 6.0, see Enabling Client Certificates in IIS 6.0. Weitere Informationen finden Sie unterFor more information aboutIIS 7.0IIS 7.0, finden Sie unter IIS 7.0 Beta: Konfigurieren von Serverzertifikaten in IIS 7.0. IIS 7.0IIS 7.0, see IIS 7.0 Beta: Configuring Server Certificates in IIS 7.0.

DigestDigest

Die Hashwertauthentifizierung ähnelt der Standardauthentifizierung, bietet jedoch den Vorteil, die Anmeldeinformationen als Hash zu senden und nicht als Klartext.Digest authentication is similar to Basic authentication, but offers the advantage of sending the credentials as a hash, instead of in clear text. Weitere Informationen finden Sie unterFor more information aboutIIS 6.0IIS 6.0, finden Sie unter Digestauthentifizierung in IIS 6.0. IIS 6.0IIS 6.0, see Digest Authentication in IIS 6.0. Weitere Informationen finden Sie unterFor more information aboutIIS 7.0IIS 7.0, finden Sie unter IIS 7.0 Beta: Konfigurieren der Digestauthentifizierung. IIS 7.0IIS 7.0, see IIS 7.0 Beta: Configure Digest Authentication.

WindowsWindows

Dies entspricht der integrierten Windows-Authentifizierungsmethode in IIS.This corresponds to integrated Windows authentication in IIS. Bei dieser Methode muss sich auch der Server in einer Windows-Domäne befinden, die das Kerberos-Protokoll als Domänencontroller verwendet.When set to this value, the server is also expected to exist on a Windows domain that uses the Kerberos protocol as its domain controller. 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.If the server is not on a Kerberos-backed domain, or if the Kerberos system fails, you can use the NT LAN Manager (NTLM) value described in the next section. Weitere Informationen finden Sie unterFor more information aboutIIS 6.0IIS 6.0, finden Sie unter integrierte Windows-Authentifizierung in IIS 6.0. IIS 6.0IIS 6.0, see Integrated Windows Authentication in IIS 6.0. Weitere Informationen finden Sie unterFor more information aboutIIS 7.0IIS 7.0, finden Sie unter IIS 7.0 Beta: Konfigurieren von Serverzertifikaten in IIS 7.0. IIS 7.0IIS 7.0, see IIS 7.0 Beta: Configuring Server Certificates in IIS 7.0.

NTLMNTLM

Dadurch kann der Server NTLM für die Authentifizierung verwenden, falls das Kerberos-Protokoll fehlschlägt.This enables the server to use NTLM for authentication if the Kerberos protocol fails. Weitere Informationen finden Sie unterFor more information aboutKonfigurieren von IIS in IIS 6.0IIS 6.0, finden Sie unter NTLM-Authentifizierung durch das Erzwingen des. configuring IIS in IIS 6.0IIS 6.0, see Forcing NTLM Authentication. Im Falle von IIS 7.0IIS 7.0 schließt die Windows-Authentifizierung die NTLM-Authentifizierung ein.For IIS 7.0IIS 7.0, the Windows authentication includes NTLM authentication. Weitere Informationen finden Sie unterFor more information, seeIIS 7.0 Beta: Konfigurieren von Serverzertifikaten in IIS 7.0. IIS 7.0 Beta: Configuring Server Certificates in IIS 7.0.

WsHttpBindingWsHttpBinding

Die WSHttpBinding-Klasse ist für die Zusammenarbeit mit Diensten vorgesehen, die WS--Spezifikationen implementieren.The WSHttpBinding class is designed for interoperation with services that implement WS- specifications. Die Transportsicherheit für diese Bindung ist SSL (Secure Sockets Layer) über HTTP oder HTTPS.The transport security for this binding is Secure Sockets Layer (SSL) over HTTP, or HTTPS. Um eine WCFWCF-Anwendung zu erstellen, die SSL verwendet, verwenden Sie IIS, um die Anwendung zu hosten.To create an WCFWCF application that uses SSL, use IIS to host the application. 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.Alternatively, if you are creating a self-hosted application, use the HttpCfg.exe tool to bind an X.509 certificate to a specific port on a computer. Die Anschlussnummer wird als Teil der WCFWCF-Anwendung als Endpunktadresse angegeben.The port number is specified as part of the WCFWCF application as an endpoint address. Bei Verwendung des Transportmodus muss die Endpunktadresse das HTTPS-Protokoll enthalten. Andernfalls wird zur Laufzeit eine Ausnahme ausgelöst.When using transport mode, the endpoint address must include the HTTPS protocol or an exception will be thrown at run time. Weitere Informationen finden Sie unterFor more information, seeHTTP-Transportsicherheit. HTTP Transport Security.

Legen Sie zur Clientauthentifizierung die ClientCredentialType-Eigenschaft der HttpTransportSecurity-Klasse auf einen der HttpClientCredentialType-Enumerationswerte fest.For client authentication, set the ClientCredentialType property of the HttpTransportSecurity class to one of the HttpClientCredentialType enumeration values. Die Enumerationswerte sind identisch mit den Client-Anmeldeinformationstypen für BasicHttpBinding und sind darauf ausgerichtet, mit IIS-Diensten gehostet zu werden.The enumeration values are identical to the client credential types for BasicHttpBinding and are designed to be hosted with IIS services.

Das folgende Beispiel zeigt die mit einem Client-Anmeldeinformationstyp von Windows verwendete Bindung.The following example shows the binding being used with a client credential type of Windows.

// 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

WSDualHttpBindingWSDualHttpBinding

Diese Bindung bietet lediglich Sicherheit auf Nachrichtenebene, nicht Sicherheit auf Transportebene.This binding provides only message-level security, not transport-level security.

NetTcpBindingNetTcpBinding

Die NetTcpBinding-Klasse verwendet TCP für den Nachrichtentransport.The NetTcpBinding class uses TCP for message transport. Die Sicherheit für den Transportmodus wird über die Implementierung von TLS über TCP bereitgestellt.Security for the transport mode is provided by implementing Transport Layer Security (TLS) over TCP. Die TLS-Implementierung wird vom Betriebssystem bereitgestellt.The TLS implementation is provided by the operating system.

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.You can also specify the client's credential type by setting the ClientCredentialType property of the TcpTransportSecurity class to one of the TcpClientCredentialType values, as shown in the following code.

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

ClientClient

Auf dem Client müssen Sie mit der SetCertificate-Methode der X509CertificateInitiatorClientCredential-Klasse ein Zertifikat angeben.On the client, you must specify a certificate using the SetCertificate method of the X509CertificateInitiatorClientCredential class.

Hinweis

Wenn Sie die Windows-Sicherheit verwenden, ist kein Zertifikat erforderlich.If you are using Windows security, a certificate is not required.

Der folgende Code verwendet den Fingerabdruck des Zertifikats, der es eindeutig identifiziert.The following code uses the thumbprint of the certificate, which uniquely identifies it. Weitere Informationen finden Sie unterFor more information aboutZertifikate, finden Sie unter arbeiten mit Zertifikaten. certificates, see Working with Certificates.

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 angeben, in der Konfiguration des Clients mithilfe einer <ClientCredentials > -Element im verhaltensabschnitt.Alternatively, specify the certificate in the client's configuration using a <clientCredentials> element in the behaviors section.

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

NetNamedPipeBindingNetNamedPipeBinding

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.The NetNamedPipeBinding class is designed for efficient intra-machine communication; that is, for processes running on the same computer, although named pipe channels can be created between two computers on the same network. Diese Bindung bietet lediglich Sicherheit auf Transportebene.This binding provides only transport-level security. Wenn Sie mit dieser Bindung Anwendungen erstellen, müssen die Endpunktadressen "net.pipe" als Protokoll der Endpunktadresse enthalten.When creating applications using this binding, the endpoint addresses must include "net.pipe" as the protocol of the endpoint address.

WSFederationHttpBindingWSFederationHttpBinding

Wenn Sie Transportsicherheit verwenden, erfolgt diese Bindung mit SSL über HTTP (als HTTPS bezeichnet) und einem ausgestellten Token (TransportWithMessageCredential).When using transport security, this binding uses SSL over HTTP, known as HTTPS with an issued token (TransportWithMessageCredential). Weitere Informationen finden Sie unterFor more information aboutverbundanwendungen finden Sie unter Verbund und ausgestellte Token. federation applications, see Federation and Issued Tokens.

NetPeerTcpBindingNetPeerTcpBinding

Die NetPeerTcpBinding-Klasse stellt einen sicheren Transportmechanismus dar, ausgerichtet auf eine effektive Kommunikation, die die Peer-to-Peer-Netzwerkfunktion verwendet.The NetPeerTcpBinding class is a secure transport that is designed for efficient communication using the peer-to-peer networking feature. Wie anhand des Namens der Klasse und der Bindung angegeben, ist TCP das Protokoll.As indicated by the name of the class and binding, TCP is the protocol. Wenn der Sicherheitsmodus auf Transport festgelegt ist, implementiert die Bindung TLS über TCP.When the security mode is set to Transport, the binding implements TLS over TCP. Weitere Informationen finden Sie unterFor more information aboutdie Peer-zu-Peer-Funktion finden Sie unter Peer-zu-Peer-Netzwerken. the peer-to-peer feature, see Peer-to-Peer Networking.

MsmqIntegrationBinding und NetMsmqBindingMsmqIntegrationBinding and NetMsmqBinding

Eine vollständige Erläuterung der transportsicherheit mit Message Queuing (früher als MSMQ bezeichnet), finden Sie unter Sichern von Nachrichten mit Transportsicherheit.For a complete discussion of transport security with Message Queuing (previously called MSMQ), see Securing Messages Using Transport Security.

Siehe auchSee Also

Programmieren der WCF-SicherheitProgramming WCF Security