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


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

Определение

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

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

Поля

Имя Значение Описание
SignBeforeEncrypt 0

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

SignBeforeEncryptAndEncryptSignature 1

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

EncryptBeforeSign 2

Указывает, что сообщение SOAP шифруется до создания цифровой подписи для сообщения 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.MessageProtectionOrderAsymmetricSecurityBindingElement класса и SymmetricSecurityBindingElement.MessageProtectionOrder свойством SymmetricSecurityBindingElement классов.

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

Что упорядочено?

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

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

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

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

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

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