Partager via


Comment : créer un service qui utilise un validateur de certificat personnalisé

Cette rubrique décrit comment implémenter un validateur de certificat personnalisé et comment configurer les informations d'identification du service ou du client pour remplacer la logique de validation de certificat par défaut par le validateur de certificat personnalisé.

Si le certificat X.509 est utilisé pour authentifier un client ou un service, Windows Communication Foundation (WCF) utilise par défaut le magasin de certificats Windows et API Crypto pour valider le certificat et garantir qu'il est approuvé. Les fonctionnalités intégrées de validation du certificat sont parfois insuffisantes et doivent être changées. WCF offre un moyen facile pour modifier la logique de validation en permettant aux utilisateurs d'ajouter un validateur de certificat personnalisé. Si un validateur de certificat personnalisé est spécifié, WCF n'utilise pas la logique intégrée de validation de certificat mais fait appel au validateur personnalisé.

Procédures

Pour créer un validateur de certificat personnalisé

  1. Définissez une nouvelle classe dérivée de X509CertificateValidator.

  2. Implémentez la méthode abstraite Validate. Le certificat qui doit être validé est passé sous la forme d'un argument à la méthode. Si le certificat passé n'est pas valide selon la logique de validation, cette méthode lève une SecurityTokenValidationException. Si le certificat est valide, la méthode est retournée à l'appelant.

    ms733806.note(fr-fr,VS.90).gifRemarque :
    Pour renvoyer des erreurs d'authentification au client, levez une exception FaultException dans la méthode Validate.

Pour spécifier un validateur de certificat personnalisé dans la configuration du service

  1. Ajoutez un élément <behaviors> et serviceBehaviors section à l'élément <system.ServiceModel>.

  2. Ajoutez un Behavior element et affectez une valeur appropriée à l'attribut name.

  3. Ajoutez un <serviceCredentials> Element à l'élément <behavior>.

  4. Ajoutez un élément <clientCertificate> à l'élément <serviceCredentials>.

  5. Ajoutez un <authentication> of <clientCertificate> Element à l'élément <clientCertificate>.

  6. Affectez à l'attribut customCertificateValidatorType le type de validateur. L'exemple suivant affecte à l'attribut l'espace de noms et le nom du type.

  7. Affectez à l'attribut certificateValidationMode la valeur Custom.

    <configuration>
     <system.serviceModel>
      <behaviors>
       <serviceBehaviors>
        <behavior name="ServiceBehavior">
         <serviceCredentials>
          <clientCertificate>
          <authentication certificateValidationMode="Custom" customCertificateValidatorType="Samples.MyValidator, service" />
          </clientCertificate>
         </serviceCredentials>
        </behavior>
       </serviceBehaviors>
      </behaviors>
    </system.serviceModel>
    </configuration>
    

Pour spécifier un validateur de certificat personnalisé à l'aide de la configuration sur le client

  1. Ajoutez un élément <behaviors> et serviceBehaviors section à l'élément <system.ServiceModel>.

  2. Ajoutez un élément <endpointBehaviors>.

  3. Ajoutez un élément <behavior>, puis affectez à l'attribut name une valeur appropriée.

  4. Ajoutez un élément <clientCredentials>.

  5. Ajoutez un <serviceCertificate> of <clientCredentials> Element

  6. Ajoutez un <authentication> of <serviceCertificate> Element comme illustré dans l'exemple suivant.

  7. Affectez à l'attribut customCertificateValidatorType le type de validateur.

  8. Affectez à l'attribut certificateValidationMode la valeur Custom. L'exemple suivant affecte à l'attribut l'espace de noms et le nom du type.

    <configuration>
     <system.serviceModel>
      <behaviors>
       <endpointBehaviors>
        <behavior name="clientBehavior">
         <clientCredentials>
          <serviceCertificate>
           <authentication certificateValidationMode="Custom" 
                  customCertificateValidatorType=
             "Samples.CustomX509CertificateValidator, client"/>
          </serviceCertificate>
         </clientCredentials>
        </behavior>
       </endpointBehaviors>
      </behaviors>
     </system.serviceModel>
    </configuration>
    

Pour spécifier un validateur de certificat personnalisé à l'aide du code sur le service

  1. Spécifiez le validateur de certificat personnalisé sur la propriété ClientCertificate. Vous pouvez accéder aux informations d'identification de service à l'aide de la propriété Credentials.

  2. Affectez la valeur Custom à la propriété CertificateValidationMode.

Pour spécifier un validateur de certificat personnalisé à l'aide du code sur le client

  1. Spécifiez le validateur de certificat personnalisé à l'aide de la propriété CustomCertificateValidator. Vous pouvez accéder aux informations d'identification du client à l'aide de la propriété Credentials. (La classe de client générée par ServiceModel Metadata Utility Tool (Svcutil.exe) dérive toujours de la classe ClientBase.)

  2. Affectez la valeur Custom à la propriété CertificateValidationMode.

Exemple

Description

L'exemple suivant montre une implémentation d'un validateur de certificat personnalisé et son utilisation sur le service.

Code

Voir aussi

Référence

X509CertificateValidator