Transportsicherheit mit Zertifikatauthentifizierung
Das folgende Szenario zeigt einen Windows Communication Foundation (WCF)-Client und -Dienst gesichert durch ein X.509-Zertifikat. Jeder Client hat ein Zertifikat, das für die Client-Authentifizierung durch Secure Sockets Layer (SSL) verwendet werden kann und von einem Dienst als vertrauenswürdig eingestuft wird. Dieses Beispiel veranschaulicht ein Anforderungs/Antwort-Nachrichtmuster.
Weitere Informationen zur Verwendung eines Zertifikats mit einem Dienst finden Sie unter Verwenden von Zertifikaten und Gewusst wie: Konfigurieren eines Anschlusses mit einem SSL-Zertifikat.
Merkmal | Beschreibung |
---|---|
Sicherheitsmodus |
Transport |
Interoperabilität |
Mit vorhandenen Webdienstclients und Diensten. |
Authentifizierung (Server) Authentifizierung (Client) |
Ja (mithilfe von HTTPS) Ja (mithilfe eines Zertifikats) |
Integrität |
Ja |
Vertraulichkeit |
Ja |
Transport |
HTTPS |
Bindung |
Dienst
Der folgende Code und die Konfiguration werden unabhängig voneinander ausgeführt. Führen Sie einen der folgenden Schritte aus:
- Erstellen Sie einen separaten Dienst, indem Sie den Code ohne Konfiguration verwenden.
- Erstellen Sie mit der angegebenen Konfiguration einen Dienst, aber definieren Sie keine Endpunkte.
Code
Im folgenden Code wird gezeigt, wie ein Dienstendpunkt, der Transportsicherheit und ein Zertifikat verwendet, erstellt wird.
Konfiguration
Die folgende Konfiguration kann statt des Codes zum Einrichten des Diensts verwendet werden:
<bindings>
<wsHttpBinding>
<binding name="CertificateWithTransport">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="ServiceModel.Calculator"
behaviorConfiguration="credentialConfig" >
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="CertificateWithTransport"
contract="ServiceModel.ICalculator" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="credentialConfig">
<serviceCredentials>
<clientCertificate trustedStoreLocation="LocalMachine"
revocationMode="Online"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
Client
Der folgende Code und die folgende Konfiguration werden unabhängig voneinander ausgeführt. Führen Sie einen der folgenden Schritte aus:
- Erstellen Sie mit dem Code (und dem Clientcode) einen eigenständigen Client.
- Erstellen Sie einen Client, der keine Endpunktadressen definiert. Verwenden Sie stattdessen den Clientkonstruktor, der den Konfigurationsnamen als Argument verwendet. Beispiel:
Code
Der folgende Code erstellt den Client. Die Bindung ist für die Verwendung der Transportmodussicherheit mit dem TCP-Transport konfiguriert, wobei der Client-Anmeldungsinformationstyp auf Windows festgelegt ist.
Konfiguration
Der folgende Konfigurationscode gilt für den Client und gibt ebenso den Zertifikatspeicherort und die Werte an, die für das Suchen verwendet werden.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="credentialConfiguration">
<clientCredentials>
<clientCertificate findValue="Contoso.com"
storeLocation="CurrentUser"
x509FindType="FindBySubjectName" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ICalculator">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://machineName/Calculator"
behaviorConfiguration="credentialConfiguration"
binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_ICalculator"
contract="ICalculator"
name="WSHttpBinding_ICalculator" />
</client>
</system.serviceModel>
</configuration>