Übersicht über die Transportsicherheit

Transportsicherheitsmechanismen in Windows Communication Foundation (WCF) hängen von der Bindung und dem verwendeten Transport ab. 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 Sicherheitsmechanismen beschrieben, die für die vom WCF-System bereitgestellten Bindungen verwendet werden.

ms729700.note(de-de,VS.100).gifHinweis:
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.

ms729700.Warning(de-de,VS.100).gif Vorsicht:
Wenn die Transportsicherheit verwendet wird, kann die CurrentPrincipal-Eigenschaft überschrieben werden. Wenn dies verhindert werden soll, legen Sie die PrincipalPermission auf None fest. ServiceAuthorizationBehavior ist ein Dienstverhalten, das in der 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.

Dim b As BasicHttpBinding = New BasicHttpBinding()
b.Security.Mode = BasicHttpSecurityMode.Transport
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
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 über über IIS 6.0 finden Sie unter , see Aktivieren der Standardauthentifizierung und Konfigurieren des Bereichsnamens. Weitere Informationen über über IIS 7.0 finden Sie unter IIS 7.0 Beta: Configure Basic Authentication (Seite ist möglicherweise nur in englischer Sprache verfügbar).

Zertifikat (Certificate)

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 über über IIS 6.0 finden Sie unter Aktivieren von Clientzertifikaten in IIS 6.0. Weitere Informationen über über IIS 7.0 finden Sie unter IIS 7.0 Beta: Configuring Server Certificates in IIS 7.0 (Seite ist möglicherweise nur in englischer Sprache verfügbar).

Digest

Die Digest-Authentifizierung ähnelt der Standardauthentifizierung, bietet jedoch den Vorteil, die Anmeldeinformationen als Hash zu senden und nicht als Klartext. Weitere Informationen über über IIS 6.0 finden Sie unter Digest Authentication in IIS 6.0 (Seite ist möglicherweise nur in englischer Sprache verfügbar). Weitere Informationen über über IIS 7.0 finden Sie unter IIS 7.0 Beta: Configure Digest Authentication (Seite ist möglicherweise nur in englischer Sprache verfügbar).

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 über über IIS 6.0 finden Sie unter Integrierte Windows-Authentifizierung in IIS 6.0. Weitere Informationen über über IIS 7.0 finden Sie unter IIS 7.0 Beta: Configuring Server Certificates in IIS 7.0 (Seite ist möglicherweise nur in englischer Sprache verfügbar).

NTLM

Mit dieser Einstellung kann der Server NTLM für die Authentifizierung verwenden, falls das Kerberos-Protokoll fehlschlägt. Weitere Informationen über über das Konfigurieren von IIS in IIS 6.0 finden Sie unter Forcing NTLM Authentication (Seite ist möglicherweise nur in englischer Sprache verfügbar). Im Falle von IIS 7.0 schließt die Windows-Authentifizierung die NTLM-Authentifizierung ein. Weitere Informationen finden Sie unter IIS 7.0 Beta: Configuring Server Certificates in IIS 7.0 (Seite ist möglicherweise nur in englischer Sprache verfügbar).

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. 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 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.
Dim b As WSHttpBinding = New WSHttpBinding(SecurityMode.Transport)
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.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;

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.

Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
NetTcpBinding b = 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.

ms729700.note(de-de,VS.100).gifHinweis:
Wenn Sie die Windows-Sicherheit verwenden, ist kein Zertifikat erforderlich.

Der folgende Code verwendet den Fingerabdruck des Zertifikats, der es als einzigartig identifiziert. Weitere Informationen über über Zertifikate finden Sie unter Verwenden von Zertifikaten.

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")
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");

Sie können das Zertifikat auch in der Konfiguration des Clients angeben. Verwenden Sie dazu ein <clientCredentials>-Element im Verhaltensabschnitt.

<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 die Transportsicherheit verwenden, verwendet diese Bindung SSL über HTTP, bekannt als HTTPS mit einem ausgestellten Token (TransportWithMessageCredential). Weitere Informationen über über Verbundanwendungen finden Sie unter Verbund 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 über über die Peer-to-Peer-Funktion 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 mit Transportsicherheit.

Siehe auch

Konzepte

Programmieren der WCF-Sicherheit