Partager via


Sécurité de transport avec l'authentification par certificat

Le scénario suivant représente un client Windows Communication Foundation (WCF) et le service sécurisé par un certificat X.509. Chaque client possède un certificat qui peut être utilisé pour l'authentification SSL (Secure Sockets Layer) du client et qui est approuvé par le service. Cet exemple montre un modèle de messages de demande/réponse.

Pour plus d'informations sur l'utilisation d'un certificat avec un service, consultez Utilisation des certificats et Comment : configurer un port avec un certificat SSL.

Transfert sécurisé à l'aide de certificats

Caractéristique Description

Mode de sécurité

Transport

Interopérabilité

Avec les clients de service Web et les services existants.

Authentification (serveur)

Authentification (client)

Oui (à l'aide de HTTPS)

Oui (à l'aide d'un certificat)

Intégrité

Oui

Confidentialité

Oui

Transport

HTTPS

Liaison

WSHttpBinding

Service

La configuration et le code suivants 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 utiliser la configuration.
  • Créez un service à l'aide de la configuration fournie, mais ne définissez pas de point de terminaison.

Code

Le code suivant indique comment créer un point de terminaison de service qui utilise une sécurité de transport et un certificat.

Configuration

La configuration suivante peut être utilisée à la place du code pour paramétrer le service :

<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

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 la configuration comme argument. Par exemple :

Code

Le code suivant crée le client. La liaison est configurée de manière à utiliser la sécurité du mode de transport, avec le transport TCP et avec le type Windows d'informations d'identification du client.

Configuration

Le code de configuration suivant est pour le client, et spécifie de même l'emplacement du certificat et les valeurs utilisées pour le trouver.

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

Voir aussi

Concepts

Vue d'ensemble de la sécurité