Sécurité de message avec un client de certificat

Le scénario suivant montre un client et un service Windows Communication Foundation (WCF) sécurisés à l'aide du mode de sécurité de message. Le client et le service sont tous les deux authentifiés à l'aide de certificats. Pour plus d'informations, consultez Sécurité des applications distribuées.

Pour obtenir un exemple d'application, consultez Message Security Certificate.

Sécurité de message à l'aide d'un certificat

Caractéristique Description

Mode de sécurité

Message

Interopérabilité

WCF uniquement

Authentification (serveur)

Initialement, l'utilisation de la négociation TLS (Transport Layer Security) requiert l'authentification du serveur à l'aide d'un certificat de service

Authentification (client)

À l'aide d'un certificat client et de la négociation TLS

Intégrité

Oui, à l'aide du protocole TLS

Confidentialité

Oui, à l'aide du protocole TLS

Transport

HTTP

Liaison

WSHttpBinding

Service

La configuration et le code ci-dessous sont destinés à s'exécuter indépendamment. Effectuez l'une des opérations suivantes :

  • Créez un service autonome à l'aide du code sans configuration.
  • Créez un service à l'aide de la configuration fournie, mais ne définissez pas de point de terminaison.

Code

Le code ci-dessous montre comment créer un point de terminaison de service qui utilise la sécurité de message pour établir un contexte sécurisé.

Configuration

La configuration ci-dessous peut être utilisée à la place du code.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceCredentialsBehavior">
          <serviceCredentials>
            <serviceCertificate findValue="Contoso.com"
                                x509FindType="FindBySubjectName" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="ServiceCredentialsBehavior" 
               name="ServiceModel.Calculator">
        <endpoint address="https://localhost/Calculator" 
                  binding="wsHttpBinding"
                  bindingConfiguration="MessageAndCerficiateClient" 
                  name="SecuredByClientCertificate"
                  contract="ServiceModel.ICalculator" />
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ICalculator">
          <security mode="Message">
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client />
  </system.serviceModel>
</configuration>

Client

La configuration et le code ci-dessous sont destinés à s'exécuter indépendamment. Effectuez l'une des opérations suivantes :

  • Créez un client autonome à l'aide du code (et du code client).
  • Créez un client qui ne définit pas d'adresse de point de terminaison. Au lieu de cela, utilisez le constructeur client qui accepte le nom de configuration comme argument. Par exemple :

Code

Le code ci-dessous crée le client. La liaison s'effectue avec la sécurité en mode de message et le type d'informations d'identification client a la valeur Certificate.

Configuration

La configuration ci-dessous spécifie le certificat client à l'aide d'un comportement de point de terminaison. Pour plus d'informations sur les certificats, consultez Utilisation des certificats. Le code utilise également un élément <identity> pour spécifier un nom DNS (Domain Name System) de l'identité de serveur attendue. Pour plus d'informations sur l'identité, consultez Identité du service et authentification.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="endpointCredentialsBehavior">
          <clientCredentials>
            <clientCertificate findValue="Cohowinery.com" 
               storeLocation="LocalMachine"
              x509FindType="FindBySubjectName" />
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ICalculator" >
          <security mode="Message">
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://machineName/Calculator" 
                behaviorConfiguration="endpointCredentialsBehavior"
                binding="wsHttpBinding"
                bindingConfiguration="WSHttpBinding_ICalculator"
                contract="ICalculator"
                name="WSHttpBinding_ICalculator">
        <identity>
          <dns value="Contoso.com" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

Voir aussi

Concepts

Vue d'ensemble de la sécurité
Identité du service et authentification
Utilisation des certificats