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