Freigeben über


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.

Sichere Übertragung mit Zertifikaten

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

WSHttpBinding

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>

Siehe auch

Konzepte

Sicherheitsübersicht