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