MessageProtectionOrder Enumeration

Definition

Gibt die Reihenfolge der Vorgänge an, mit denen eine Nachricht geschützt wird.

public enum class MessageProtectionOrder
public enum MessageProtectionOrder
type MessageProtectionOrder = 
Public Enum MessageProtectionOrder
Vererbung
MessageProtectionOrder

Felder

EncryptBeforeSign 2

Gibt an, dass die SOAP-Nachricht verschlüsselt wird, bevor eine digitale Signatur für die SOAP-Nachricht generiert wird.

SignBeforeEncrypt 0

Gibt an, dass eine digitale Signatur für die SOAP-Nachricht generiert wird, bevor ein Teil der SOAP-Nachricht verschlüsselt wird; die digitale Signatur wird jedoch nicht verschlüsselt.

SignBeforeEncryptAndEncryptSignature 1

Gibt an, dass eine digitale Signatur für die SOAP-Nachricht generiert wird, bevor ein Teil der SOAP-Nachricht verschlüsselt wird; die digitale Signatur wird verschlüsselt.

Beispiele

Im folgenden Beispiel wird ein SymmetricSecurityBindingElement Element erstellt und dessen MessageProtectionOrder Eigenschaft auf SignBeforeEncrypt festgelegt.

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

Hinweise

Diese Enumeration wird in Verbindung mit der AsymmetricSecurityBindingElement.MessageProtectionOrder-Eigenschaft vom AsymmetricSecurityBindingElement und der SymmetricSecurityBindingElement.MessageProtectionOrder-Eigenschaft der SymmetricSecurityBindingElement-Klassen verwendet.

Wenn eine Nachricht anfällig für einen Digestangriff ist (z. B. wenn die Nachricht kurz oder die Entropie niedrig ist), sollten Sie die Option SignBeforeEncryptAndEncryptSigne oder EncryptBeforeSign verwenden. (Entropie sind zufällige Daten, die von einem Server, einem Client oder beidem bereitgestellt werden und zum Erstellen eines gemeinsam genutzten Schlüssels zum Verschlüsseln und Entschlüsseln von Daten verwendet werden.)

Was passiert?

WCF bietet drei verschiedene Schutzebenen, die bestimmen, wie Nachrichten mithilfe der SOAP-Nachrichtensicherheit geschützt werden. Der Standardwert ist SignBeforeEncryptAndEncryptSignature. Mit dieser Einstellung wird zuerst die Nachricht signiert, der Nachrichtentext verschlüsselt und dann die XML-Signatur verschlüsselt. Dies reduziert die Wahrscheinlichkeit für einen Angriff auf die Signatur durch Erraten der Verschlüsselung.

Bei Verwendung der Standardeinstellung ist aber mit Auswirkungen auf die Leistung zu rechnen. Eine erhöhte Sicherheit führt in der Regel zu geringerer Leistung. Durch die Verschlüsselung der Signatur kann die Leistung um 10 bis 40 Prozent sinken. Verwenden Sie SignBeforeEncrypt, wenn der Dateninhalt der Nachricht einen niedrigen Wert hat und der Leistungsdurchsatz einen höheren Stellenwert hat. Bei dieser Einstellung wird der Signaturhashwert in Klartext gesendet, weswegen die Nachricht bei geringer Entropie anfälliger gegenüber Guess-and-Verify-Angriffen (Raten und Überprüfen) ist.

Nur benutzerdefinierte Bindungen

Um die MessageProtectionOrder-Eigenschaft zu ändern, ist die Erstellung einer benutzerdefinierten Sicherheitsbindung erforderlich. Weitere Informationen zum Erstellen benutzerdefinierter Bindungen finden Sie unter Erstellen User-Defined Bindungen. Weitere Informationen zum Erstellen einer benutzerdefinierten Bindung für einen bestimmten Authentifizierungsmodus finden Sie unter Vorgehensweise: Erstellen eines SecurityBindingElement für einen angegebenen Authentifizierungsmodus.

Gilt für:

Weitere Informationen