Procédure : désactiver le chiffrement des signatures numériques
Par défaut, un message est signé et la signature est chiffrée numériquement. Cette opération est contrôlée en créant une liaison personnalisée à l’aide d’une instance de AsymmetricSecurityBindingElement ou de SymmetricSecurityBindingElement, et en affectant à la propriété MessageProtectionOrder
de l’une de ces deux classes une valeur d’énumération MessageProtectionOrder. Par défaut, il s’agit de SignBeforeEncryptAndEncryptSignature. Ce processus consomme jusqu'à 30 pour cent de temps de plus que la simple signature et le chiffrement à partir de la taille de message totale (plus le message est petit, plus grand est l'impact sur les performances). Toutefois, désactiver le chiffrement de la signature présente un risque en matière de sécurité, puisqu'il peut permettre à un intrus de deviner le contenu du message. En effet, l'élément de la signature contient le code de hachage du texte brut de chaque partie signée du message. Par exemple, même si le corps des messages est chiffré par défaut, la signature non chiffrée contient le code de hachage du corps des messages avant le chiffrement. Si le jeu de valeurs possibles pour la partie signée et chiffrée est petit, un intrus peut être en mesure de deviner le contenu en consultant la valeur de hachage. Le chiffrement de la signature réduit les risques présents dans ce domaine.
Par conséquent, désactivez uniquement le chiffrement de la signature lorsque la valeur du contenu est basse ou le jeu de valeurs de contenu possible est grand et non déterministe, et le gain de performance est plus important que de réduire les risques d'attaque décrits précédemment.
Notes
Si le message ne contient aucun élément chiffré, l'élément de signature n'est pas chiffré, même lorsque la propriété AsymmetricSecurityBindingElement.MessageProtectionOrder ou SymmetricSecurityBindingElement.MessageProtectionOrder a la valeur SignBeforeEncryptAndEncryptSignature. Ce comportement se produit même avec les liaisons fournies par le système ; toutes les liaisons fournies par le système ont l’ordre de protection des messages défini à SignBeforeEncryptAndEncryptSignature
. Toutefois, le code WSDL (Web Services Description Language) généré par WCF contiendra encore l’assertion <sp:EncryptSignature>
.
Pour désactiver la signature numérique
Créer un CustomBinding. Pour plus d’informations, consultez Procédure : Créer une liaison personnalisée à l’aide de SecurityBindingElement.
Ajoutez un élément AsymmetricSecurityBindingElement ou un élément SymmetricSecurityBindingElement à la collection de liaisons.
Affectez à la propriété AsymmetricSecurityBindingElement.MessageProtectionOrder la valeur SignBeforeEncrypt ou affectez à la propriété SymmetricSecurityBindingElement.MessageProtectionOrder la valeur SignBeforeEncrypt.