Поделиться через


MessageProtectionOrder Перечисление

Определение

Указывает порядок операций при защите сообщения.

public enum class MessageProtectionOrder
public enum MessageProtectionOrder
type MessageProtectionOrder = 
Public Enum MessageProtectionOrder
Наследование
MessageProtectionOrder

Поля

EncryptBeforeSign 2

Указывает, что сообщение SOAP шифруется перед созданием для этого сообщения цифровой сигнатуры.

SignBeforeEncrypt 0

Указывает, что цифровая сигнатура создается для сообщения SOAP перед шифрованием любой другой части сообщения, однако сама цифровая сигнатура не шифруется.

SignBeforeEncryptAndEncryptSignature 1

Указывает, что цифровая сигнатура создается для сообщения SOAP перед шифрованием любой другой части сообщения, а сама цифровая сигнатура также шифруется.

Примеры

В следующем примере создается SymmetricSecurityBindingElement элемент и устанавливается его MessageProtectionOrder свойство 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

Комментарии

Это перечисление используется совместно со свойством AsymmetricSecurityBindingElement.MessageProtectionOrder класса AsymmetricSecurityBindingElement и свойством SymmetricSecurityBindingElement.MessageProtectionOrder класса SymmetricSecurityBindingElement.

Если сообщение уязвимо для дайджест-атаки (например, если сообщение короткое или энтропия низкая), следует использовать параметр SignBeforeEncryptAndEncryptSignature или EncryptBeforeSignature. (Энтропия — это случайные данные, предоставляемые сервером, клиентом или и тем, и другим, и используется для создания общего ключа для шифрования и расшифровки данных.)

Что значит «по порядку»?

WCF предлагает три разных уровня защиты, определяющих способ защиты сообщений с помощью протокола SOAP. Значение по умолчанию — SignBeforeEncryptAndEncryptSignature. На этом уровне к сообщению сначала добавляется сигнатура, затем шифруется текст сообщения, после чего шифруется XML-сигнатура. Такой подход снижает вероятность взлома сигнатуры путем ее подбора.

Однако выбранный по умолчанию уровень безопасности отрицательно влияет на производительность. В результате за повышенную безопасность приходится расплачиваться пониженной производительностью. Шифрование сигнатуры может привести к падению производительности на 10–40%. Если содержимое данных сообщения имеет низкую ценность, а пропускная способность производительности более высока, используйте SignBeforeEncrypt. При выборе этого значения хэш-код сигнатуры передается открытым текстом, что при низкой энтропии делает сообщения более уязвимыми к взлому путем подбора сигнатуры.

Только настраиваемые привязки

Чтобы изменить значение свойства MessageProtectionOrder, необходимо создать настраиваемую привязку безопасности. Дополнительные сведения о создании пользовательских привязок см. в статье Создание привязок User-Defined. Дополнительные сведения о создании пользовательской привязки для определенного режима проверки подлинности см. в разделе Практическое руководство. Создание элемента SecurityBindingElement для указанного режима проверки подлинности.

Применяется к

См. также раздел