Partager via


Exemple de sécurité des messages

L’exemple MessageSecurity montre comment implémenter une application qui utilise la sécurité des messages et des basicHttpBinding messages. Cet exemple est basé sur le guide de démarrage qui implémente un service de calculatrice.

Remarque

La procédure d’installation et les instructions de génération de cet exemple se trouvent à la fin de cette rubrique.

Le mode de sécurité de basicHttpBinding peut être défini sur les valeurs suivantes : Message, , Transport, TransportWithMessageCredentialTransportCredentialOnly et None. Dans l’exemple de fichier App.config de service suivant, la définition du point de terminaison spécifie le basicHttpBinding et fait référence à une configuration de liaison nommée Binding1, comme illustré dans l’exemple de configuration suivant :

<system.serviceModel>
  <services>
    <service name="Microsoft.ServiceModel.Samples.CalculatorService"
             behaviorConfiguration="CalculatorServiceBehavior">
     <!-- This endpoint is exposed at the base address provided by -->
     <!-- host: http://localhost:8000/ServiceModelSamples/service.-->
     <endpoint address=""
               binding="basicHttpBinding"
               bindingConfiguration="Binding1"
               contract="Microsoft.ServiceModel.Samples.ICalculator" />
    </service>
  </services>
  ...
</system.serviceModel>

La configuration de liaison définit l’attribut mode de la <sécurité>Message et définit l’attribut clientCredentialType du <message>Certificate comme indiqué dans l’exemple de configuration suivant :

<bindings>
  <basicHttpBinding>
    <!--
        This configuration defines the SecurityMode as Message and
        the clientCredentialType as Certificate.
        -->
    <binding name="Binding1" >
      <security mode = "Message">
        <message clientCredentialType="Certificate"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

Le certificat que le service utilise pour s’authentifier auprès du client est défini dans la section comportements du fichier de configuration sous l’élément serviceCredentials . Le mode de validation qui s’applique au certificat utilisé par le client pour s’authentifier auprès du service est également défini dans la section comportements sous l’élément clientCertificate .

<!--For debugging purposes, set the includeExceptionDetailInFaults attribute to true.-->
<behaviors>
  <serviceBehaviors>
    <behavior name="CalculatorServiceBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
      <!--The serviceCredentials behavior allows one to define a -->
      <!--service certificate. A service certificate is used by a -->
      <!--client to authenticate the service and provide message -->
      <!-- protection. This configuration references the "localhost"-->
      <!--certificate installed during the setup instructions. -->
      <serviceCredentials>
        <serviceCertificate findValue="localhost"
               storeLocation="LocalMachine"
               storeName="My" x509FindType="FindBySubjectName" />
        <clientCertificate>
          <!-- Setting the certificateValidationMode to -->
          <!-- PeerOrChainTrust means that if the certificate -->
          <!--is in the user's Trusted People store, then it is -->
          <!-- trusted without performing a validation of the -->
          <!-- certificate's issuer chain. This setting is used -->
          <!-- here for convenience so that the sample can be run -->
          <!-- without having to have certificates issued by a -->
          <!-- certification authority (CA). -->
          <!-- This setting is less secure than the default, -->
          <!-- ChainTrust. The security implications of this -->
          <!-- setting should be carefully considered before using -->
          <!-- PeerOrChainTrust in production code. -->
          <authentication
                       certificateValidationMode="PeerOrChainTrust" />
        </clientCertificate>
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>

Les mêmes détails de liaison et de sécurité sont spécifiés dans le fichier de configuration du client.

L’identité de l’appelant s’affiche dans la fenêtre de console de service à l’aide du code suivant :

Console.WriteLine("Called by {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name);

Lorsque vous exécutez l’exemple, les demandes et réponses de l’opération s’affichent dans la fenêtre de la console cliente. Appuyez sur Entrée dans la fenêtre du client pour arrêter le client.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.

Pour configurer et compiler l’exemple

  1. Assurez-vous d’avoir effectué la Procédure d’installation unique pour les exemples Windows Communication Foundation.

  2. Pour générer l’édition C# ou Visual Basic .NET de la solution, conformez-vous aux instructions figurant dans Building the Windows Communication Foundation Samples.

Pour exécuter l’exemple sur le même ordinateur

  1. Exécutez Setup.bat à partir de l’exemple de dossier d’installation. Cela installe tous les certificats requis pour l’exécution de l’exemple.

    Remarque

    Le fichier batch Setup.bat est conçu pour être exécuté à partir d’une invite de commandes du Kit de développement logiciel (SDK) Windows. Il nécessite que la variable d’environnement MSSDK pointe vers le répertoire où le KIT DE développement logiciel (SDK) est installé. Cette variable d’environnement est automatiquement définie dans une invite de commandes du Kit de développement logiciel (SDK) Windows.

  2. Exécutez l’application de service à partir de \service\bin.

  3. Exécutez l’application cliente à partir de \client\bin. L’activité du client s’affiche sur l’application console cliente.

  4. Si le client et le service ne sont pas en mesure de communiquer, consultez Conseils de résolution des problèmes pour les exemples WCF.

  5. Supprimez les certificats en exécutant Cleanup.bat une fois l’exemple terminé. D’autres exemples de sécurité utilisent les mêmes certificats.

Pour exécuter l’exemple sur plusieurs ordinateurs

  1. Créez un répertoire sur l’ordinateur de service pour les fichiers binaires de service.

  2. Copiez les fichiers de programme de service dans le répertoire de service sur le serveur. Copiez également les fichiers Setup.bat, Cleanup.batet ImportClientCert.bat sur le serveur.

  3. Créez un répertoire sur l’ordinateur client pour les fichiers binaires clients.

  4. Copiez les fichiers de programme client dans le répertoire client sur l’ordinateur client. Copiez également les fichiers Setup.bat, Cleanup.batet ImportServiceCert.bat sur le client.

  5. Sur le serveur, exécutez setup.bat service. L’exécution setup.bat avec l’argument service crée un certificat de service avec le nom de domaine complet de l’ordinateur et exporte le certificat de service vers un fichier nommé Service.cer.

  6. Modifiez Service.exe.config pour refléter le nouveau nom de certificat (dans l’attribut findValue de l’élément <serviceCertificate> ) qui est identique au nom de domaine complet de l’ordinateur. Modifiez également la valeur de l’adresse de base pour spécifier un nom d’ordinateur complet au lieu de localhost.

  7. Copiez le fichier Service.cer du répertoire de service vers le répertoire client sur l’ordinateur client.

  8. Sur le client, exécutez setup.bat client. L’exécution de setup.bat avec l’argument client crée un certificat client nommé client.com et exporte le certificat client vers un fichier nommé Client.cer.

  9. Dans le fichier Client.exe.config sur l’ordinateur client, modifiez la valeur d’adresse du point de terminaison pour qu’il corresponde à la nouvelle adresse de votre service. Pour ce faire, remplacez localhost par le nom de domaine complet du serveur. Remplacez également l’attribut findValue de defaultCertificate> par le nouveau nom de< certificat de service qui est le nom de domaine complet du serveur.

  10. Copiez le fichier Client.cer du répertoire client vers le répertoire de service sur le serveur.

  11. Sur le client, exécutez ImportServiceCert.bat. Cela importe le certificat de service à partir du fichier Service.cer dans le magasin CurrentUser - TrustedPeople.

  12. Sur le serveur, exécutez ImportClientCert.bat, cela importe le certificat client à partir du fichier Client.cer dans le magasin LocalMachine - TrustedPeople.

  13. Sur l’ordinateur de service, exécutez-Service.exe à partir d’une invite de commandes.

  14. Sur l’ordinateur client, lancez Client.exe à partir d’une fenêtre d’invite de commandes.

    1. Si le client et le service ne sont pas en mesure de communiquer, consultez Conseils de résolution des problèmes pour les exemples WCF.

Pour nettoyer après le test

  • Exécutez Cleanup.bat dans le dossier d’exemples une fois que vous avez terminé d’exécuter l’exemple.

    Remarque

    Ce script ne supprime pas les certificats de service sur un client lors de l’exécution de cet exemple sur plusieurs ordinateurs. Si vous avez exécuté des exemples Windows Communication Foundation (WCF) qui utilisent des certificats sur plusieurs ordinateurs, veillez à effacer les certificats de service installés dans le magasin CurrentUser - TrustedPeople. Pour ce faire, utilisez la commande suivante : Par exemple : certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com