Comment : remplacer le fournisseur de services de chiffrement par la clé privée d'un certificat X.509
Cette rubrique montre comment modifier le fournisseur de services de chiffrement utilisé pour fournir la clé privée d'un certificat X.509 et comment intégrer le fournisseur dans l'infrastructure de la sécurité Windows Communication Foundation (WCF). Pour plus d'informations sur l'utilisation des certificats, consultez Utilisation des certificats.
L'infrastructure de la sécurité WCF fournit une méthode pour introduire de nouveaux types de jeton de sécurité comme décrit dans Comment : créer un jeton personnalisé. Vous pouvez aussi utiliser un jeton personnalisé pour remplacer les types de jeton existants fournis par le système.
Dans cette rubrique, le jeton de sécurité X.509 fourni par le système est remplacé par un jeton X.509 personnalisé qui fournit une implémentation différente pour la clé privée de certificat. Cette opération est utile dans les scénarios où la clé privée à proprement dite est fournie par un fournisseur de services de chiffrement différent du fournisseur Windows par défaut. Parmi les exemples d'un autre fournisseur de services de chiffrement figure un module de la sécurité du matériel qui effectue toutes les opérations de chiffrement liées à la clé privée sans stocker les clés privées en mémoire, ce qui améliore la sécurité du système.
L'exemple suivant est fourni à des fins de démonstration uniquement. Il ne remplace pas le fournisseur de services de chiffrement Windows par défaut, mais il montre comment intégrer ce type de fournisseur.
Procédures
Chaque jeton de sécurité qui possède une clé ou des clés de sécurité associées doit implémenter la propriété SecurityKeys qui retourne une collection de clés issue de l'instance du jeton de sécurité. Si le jeton est un jeton de sécurité X.509, la collection contient une instance unique de la classe X509AsymmetricSecurityKey qui représente à la fois les clés privées et publiques associées au certificat. Pour remplacer le fournisseur de services de chiffrement par défaut utilisé pour fournir les clés du certificat, créez une nouvelle implémentation de cette classe.
Pour créer une clé asymétrique X.509 personnalisée
Définissez une nouvelle classe dérivée de la classe X509AsymmetricSecurityKey.
Substituez la propriété en lecture seule KeySize. Cette propriété retourne la taille de clé réelle de la paire de clés publique/privée du certificat.
Substituez la méthode DecryptKey. Cette méthode est appelée par l'infrastructure de la sécurité WCF pour déchiffrer une clé symétrique avec la clé privée du certificat. (La clé a été chiffrée précédemment avec la clé publique du certificat.)
Substituez la méthode GetAsymmetricAlgorithm. Cette méthode est appelée par l'infrastructure de la sécurité WCF pour obtenir une instance de la classe AsymmetricAlgorithm qui représente le fournisseur de services de chiffrement pour la clé privée ou publique du certificat selon les paramètres passés à la méthode.
Facultatif. Substituez la méthode GetHashAlgorithmForSignature. Substituez cette méthode si une implémentation différente de la classe HashAlgorithm est requise.
Substituez la méthode GetSignatureFormatter. Cette méthode retourne une instance de la classe AsymmetricSignatureFormatter associée à la clé privée du certificat.
Substituez la méthode IsSupportedAlgorithm. Cette méthode est utilisée pour indiquer si un algorithme de chiffrement particulier est pris en charge par l'implémentation de la clé de sécurité.
La procédure suivante indique comment intégrer l'implémentation de la clé de sécurité asymétrique personnalisée X.509 créée au cours de la procédure précédente à l'aide de l'infrastructure de la sécurité WCF afin de remplacer le jeton de sécurité X.509 fourni par le système.
Pour remplacer le jeton de sécurité X.509 fourni par le système par un jeton de clé de sécurité asymétrique X.509 personnalisé
Créez un jeton de sécurité X.509 personnalisé qui retourne la clé de sécurité asymétrique X.509 personnalisée au lieu de la clé de sécurité fournie par le système, comme indiqué dans l'exemple suivant. Pour plus d'informations sur les jetons de sécurité personnalisés, consultez Comment : créer un jeton personnalisé.
Créez un fournisseur de jetons de sécurité personnalisé qui retourne un jeton de sécurité X.509 personnalisé, comme indiqué dans l'exemple. Pour plus d'informations sur les fournisseurs de jetons de sécurité personnalisés, consultez Comment : créer un fournisseur de jetons de sécurité personnalisé.
Si la clé de sécurité personnalisée doit être utilisée sur le côté d'initiateur, créez un gestionnaire de jetons de sécurité client personnalisé et des classes d'informations d'identification du client personnalisées, comme indiqué dans l'exemple suivant. Pour plus d'informations sur les informations d'identification personnalisées du client et les gestionnaires de jetons de sécurité client, consultez Comment : créer des informations d'identification de client et de service personnalisées.
Si la clé de sécurité personnalisée doit être utilisée sur le côté destinataire, créez un gestionnaire de jetons de sécurité client personnalisé et des classes personnalisées d'informations d'identification du client, comme indiqué dans l'exemple suivant. Pour plus d'informations sur les informations d'identification de services personnalisées et les gestionnaires de jetons de sécurité de service, consultez Comment : créer des informations d'identification de client et de service personnalisées.
Voir aussi
Tâches
Comment : créer un fournisseur de jetons de sécurité personnalisé
Référence
X509AsymmetricSecurityKey
AsymmetricSecurityKey
SecurityKey
AsymmetricAlgorithm
HashAlgorithm
AsymmetricSignatureFormatter
Concepts
Comment : créer des informations d'identification de client et de service personnalisées
Comment : créer un authentificateur de jetons de sécurité personnalisé
Comment : créer un jeton personnalisé
Architecture de sécurité