Comment : utiliser des certificats X.509 distincts pour les signatures et le chiffrement
Cette rubrique contient des instructions permettant de configurer Windows Communication Foundation (WCF) afin de pouvoir utiliser différents certificats pour les signatures et le chiffrement des messages client et service.
Pour activer différents certificats pour les signatures et le chiffrement, vous devez créer des informations d'identification client ou service personnalisés (ou les deux), WCF n'offrant pas d'API permettant de définir plusieurs certificats de client ou de service. En outre, un gestionnaire de jetons de sécurité doit être configuré pour permettre l'exploitation des informations de l'ensemble des certificats et la création d'un fournisseur de jetons de sécurité qui convienne à l'utilisation des clés et à la direction des messages spécifiées.
Le diagramme suivant montre les classes principales utilisées, les classes (indiquées par une flèche pointant vers le haut) desquelles ils héritent et les types de retour de certaines méthodes et propriétés.
- MyClientCredentials est une implémentation personnalisée de ClientCredentials.
- Toutes ses propriétés indiquées dans le diagramme retournent des instances de X509Certificate2.
- Sa méthode CreateSecurityTokenManager retourne une instance de MyClientCredentialsSecurityTokenManager.
- MyClientCredentialsSecurityTokenManager est une implémentation personnalisée de ClientCredentialsSecurityTokenManager.
- Sa méthode CreateSecurityTokenProvider retourne une instance de X509SecurityTokenProvider.
Pour plus d'informations sur les informations d'identification personnalisées, consultez Comment : créer des informations d'identification de client et de service personnalisées.
De plus, vous devez créer un vérificateur d'identité personnalisé et le lier à un élément de liaison de sécurité dans une liaison personnalisée. Vous devez également utiliser les informations d'identification personnalisées au lieu des informations d'identification par défaut.
Le diagramme suivant indique les classes impliquées dans la liaison personnalisée, et comment le vérificateur d'identité personnalisé est lié. Plusieurs éléments de liaison sont impliqués, qui héritent tous de BindingElement. AsymmetricSecurityBindingElement a la propriété LocalClientSecuritySettings, qui retourne une instance de IdentityVerifier, à partir de laquelle MyIdentityVerifier est personnalisé.
Pour plus d'informations sur la création d'un vérificateur d'identité personnalisé, consultez Comment : Comment : créer un vérificateur d'identité du client personnalisé.
Pour utiliser différents certificats dans les signatures et le chiffrement
Définissez une nouvelle classe d'informations d'identification client qui hérite de la classe ClientCredentials. Implémentez quatre nouvelles propriétés pour autoriser la spécification de plusieurs certificats :
ClientSigningCertificate
,ClientEncryptingCertificate
,ServiceSigningCertificate
etServiceEncryptingCertificate
. Substituez également la méthode CreateSecurityTokenManager pour retourner une instance de la classe ClientCredentialsSecurityTokenManager personnalisée définie à l'étape suivante.Définissez un nouveau gestionnaire de jetons de sécurité client qui hérite de la classe ClientCredentialsSecurityTokenManager. Remplacez la méthode CreateSecurityTokenProvider pour créer un fournisseur de jetons de sécurité approprié. Le paramètre requirement, qui correspond à un type SecurityTokenRequirement, indique la direction des messages et spécifie les paramètres d'utilisation des clés.
Définissez une nouvelle classe d'informations d'identification de service qui hérite de la classe ServiceCredentials. Implémentez quatre nouvelles propriétés pour autoriser la spécification de plusieurs certificats :
ClientSigningCertificate
,ClientEncryptingCertificate
,ServiceSigningCertificate
etServiceEncryptingCertificate
. Substituez également la méthode CreateSecurityTokenManager pour retourner une instance de la classe ServiceCredentialsSecurityTokenManager personnalisée définie à l'étape suivante.Définissez un nouveau gestionnaire de jetons de sécurité service qui hérite de la classe ServiceCredentialsSecurityTokenManager. Remplacez la méthode CreateSecurityTokenProvider pour créer un fournisseur de jetons de sécurité qui convienne à la direction passée des messages et aux paramètres d'utilisation des clés.
Pour utiliser plusieurs certificats sur le client
Créez une liaison personnalisée. L'élément de liaison de sécurité doit fonctionner en mode duplex pour permettre aux différents fournisseurs de jetons de sécurité d'être présents pendant les requêtes et les réponses. Pour ce faire, utilisez des méthodes de transfert compatibles avec le mode duplex ou utilisez l'élément CompositeDuplexBindingElement, tel qu'illustré dans le code suivant. Liez le IdentityVerifier personnalisé défini à l'étape suivante à l'élément de liaison de sécurité. Remplacez les informations d'identification du client par défaut par les informations d'identification du client personnalisées créées précédemment.
Définissez un IdentityVerifier personnalisé. Le service dispose de plusieurs identités, différents certificats étant utilisés pour chiffrer la demande et signer la réponse.
Remarque : Dans l'exemple suivant, le vérificateur d'identité personnalisé spécifié n'effectue pas de contrôle d'identité de point de terminaison à des fins d'authentification. Cette pratique est déconseillée lors de la rédaction d'un code de production.
Pour utiliser plusieurs certificats sur le service
- Créez une liaison personnalisée. L'élément de liaison de sécurité doit fonctionner en mode duplex pour permettre aux différents fournisseurs de jetons de sécurité d'être présents pendant les requêtes et les réponses. Comme pour le client, utilisez des méthodes de transfert compatibles avec le mode duplex ou utilisez l'élément CompositeDuplexBindingElement, tel qu'illustré dans le code suivant. Remplacez les informations d'identification du service par défaut par les informations d'identification du service personnalisées créées précédemment.
Voir aussi
Référence
ClientCredentials
ServiceCredentials
ClientCredentialsSecurityTokenManager
ServiceCredentialsSecurityTokenManager
IdentityVerifier
Concepts
Comment : créer des informations d'identification de client et de service personnalisées