Partager via


MessageProtectionOrder Énumération

Définition

Spécifie l'ordre des opérations qui protègent un message.

public enum class MessageProtectionOrder
public enum MessageProtectionOrder
type MessageProtectionOrder = 
Public Enum MessageProtectionOrder
Héritage
MessageProtectionOrder

Champs

EncryptBeforeSign 2

Spécifie que le message SOAP est chiffré avant qu'une signature numérique ne soit générée pour celui-ci.

SignBeforeEncrypt 0

Spécifie qu'une signature numérique est générée pour le message SOAP avant le chiffrement de toutes les parties du message SOAP mais que la signature numérique n'est pas chiffrée.

SignBeforeEncryptAndEncryptSignature 1

Spécifie qu'une signature numérique est générée pour le message SOAP avant le chiffrement de toutes les parties du message SOAP et que la signature numérique est chiffrée.

Exemples

L’exemple suivant crée un SymmetricSecurityBindingElement élément et définit sa MessageProtectionOrder propriété sur SignBeforeEncrypt.

public static Binding CreateCustomBinding()
{
    // Create an empty BindingElementCollection to populate,
    // then create a custom binding from it.
    BindingElementCollection outputBec = new BindingElementCollection();

    // Create a SymmetricSecurityBindingElement.
    SymmetricSecurityBindingElement ssbe =
        new SymmetricSecurityBindingElement();

    // Set the algorithm suite to one that uses 128-bit keys.
    ssbe.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic128;

       // Set MessageProtectionOrder to SignBeforeEncrypt.
    ssbe.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt;

    // Use a Kerberos token as the protection token.
    ssbe.ProtectionTokenParameters = new KerberosSecurityTokenParameters();

    // Add the SymmetricSecurityBindingElement to the BindingElementCollection.
    outputBec.Add ( ssbe );
    outputBec.Add(new TextMessageEncodingBindingElement());
    outputBec.Add(new HttpTransportBindingElement());

    // Create a CustomBinding and return it; otherwise, return null.
    return new CustomBinding(outputBec);
}
Public Shared Function CreateCustomBinding() As Binding 
    ' Create an empty BindingElementCollection to populate, 
    ' then create a custom binding from it.
    Dim outputBec As New BindingElementCollection()
    
    ' Create a SymmetricSecurityBindingElement.
    Dim ssbe As New SymmetricSecurityBindingElement()
    
    ' Set the algorithm suite to one that uses 128-bit keys.
    ssbe.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic128
    
    ' Set MessageProtectionOrder to SignBeforeEncrypt.
    ssbe.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt
    
    ' Use a Kerberos token as the protection token.
    ssbe.ProtectionTokenParameters = New KerberosSecurityTokenParameters()
    
    ' Add the SymmetricSecurityBindingElement to the BindingElementCollection.
    outputBec.Add(ssbe)
    outputBec.Add(New TextMessageEncodingBindingElement())
    outputBec.Add(New HttpTransportBindingElement())
    
    ' Create a CustomBinding and return it; otherwise, return null.
    Return New CustomBinding(outputBec)

End Function

Remarques

Cette énumération est utilisée avec la propriété AsymmetricSecurityBindingElement.MessageProtectionOrder de la classe AsymmetricSecurityBindingElement et la propriété SymmetricSecurityBindingElement.MessageProtectionOrder de la classe SymmetricSecurityBindingElement.

Si un message est vulnérable à une attaque digest (par exemple, si le message est court ou si l’entropie est faible), vous devez utiliser l’option SignBeforeEncryptAndEncryptSignature ou EncryptBeforeSign. (L’entropie est des données aléatoires fournies par un serveur, un client ou les deux, et est utilisée pour créer une clé partagée pour le chiffrement et le déchiffrement des données.)

Quel est l'ordre des opérations ?

WCF offre trois niveaux de protection différents qui déterminent la façon dont les messages sont sécurisés à l’aide de la sécurité des messages SOAP. La valeur par défaut est SignBeforeEncryptAndEncryptSignature. Ce paramètre signe d'abord le message, chiffre le corps de celui-ci, puis la signature XML. Ceci réduit la probabilité de réussite d'une attaque de prédiction de chiffrement contre la signature.

Toutefois, l'utilisation de la valeur par défaut a des effets sur les performances. En effet, il existe un compromis entre les performances et l'augmentation de la sécurité. Le chiffrement de la signature peut réduire les performances de 10 à 40 %. Si le contenu des données du message est de faible valeur et que le débit de performances est plus important, utilisez SignBeforeEncrypt. Avec ce paramètre, le condensat de signature est envoyé en texte clair et le message est donc plus vulnérable aux attaques de prédiction-et-vérification en entropie basse.

Liaisons personnalisées uniquement

Modifier la propriété MessageProtectionOrder requiert la création d’une liaison de sécurité personnalisée. Pour plus d’informations sur la création de liaisons personnalisées, consultez Création de liaisons définies par l’utilisateur. Pour plus d’informations sur la création d’une liaison personnalisée pour un mode d’authentification spécifique, consultez Procédure : Créer un SecurityBindingElement pour un mode d’authentification spécifié.

S’applique à

Voir aussi