MessageProtectionOrder MessageProtectionOrder MessageProtectionOrder MessageProtectionOrder Enum

Определение

Указывает порядок операций при защите сообщения.Specifies the order of operations that protect a message.

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

Поля

EncryptBeforeSign EncryptBeforeSign EncryptBeforeSign EncryptBeforeSign 2

Указывает, что сообщение SOAP шифруется перед созданием для этого сообщения цифровой сигнатуры.Specifies that the SOAP message is encrypted before a digital signature is generated for the SOAP message.

SignBeforeEncrypt SignBeforeEncrypt SignBeforeEncrypt SignBeforeEncrypt 0

Указывает, что цифровая сигнатура создается для сообщения SOAP перед шифрованием любой другой части сообщения, однако сама цифровая сигнатура не шифруется.Specifies that a digital signature is generated for the SOAP message before any portion of the SOAP message is encrypted, but the digital signature is not encrypted.

SignBeforeEncryptAndEncryptSignature SignBeforeEncryptAndEncryptSignature SignBeforeEncryptAndEncryptSignature SignBeforeEncryptAndEncryptSignature 1

Указывает, что цифровая сигнатура создается для сообщения SOAP перед шифрованием любой другой части сообщения, а сама цифровая сигнатура также шифруется.Specifies that a digital signature is generated for the SOAP message before any portion of the SOAP message is encrypted, and the digital signature is encrypted.

Примеры

В следующем примере создается SymmetricSecurityBindingElement элемент и задает его MessageProtectionOrder свойства SignBeforeEncrypt.The following example creates a SymmetricSecurityBindingElement element and sets its MessageProtectionOrder property to 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.This enumeration is used with the AsymmetricSecurityBindingElement.MessageProtectionOrder property of the AsymmetricSecurityBindingElement and the SymmetricSecurityBindingElement.MessageProtectionOrder property of the SymmetricSecurityBindingElement classes.

Если сообщение уязвимо для атак хэш-кода (например, если сообщения или низкой энтропии), следует использовать параметр SignBeforeEncryptAndEncryptSignature или EncryptBeforeSign.If a message is vulnerable to a digest attack (for example, if the message is short or the entropy is low), you should use the SignBeforeEncryptAndEncryptSignature or EncryptBeforeSign option. (Энтропии — это случайные данные, предоставляемые сервером и клиентом и используется для создания общего ключа для шифрования и расшифровки данных.)(Entropy is random data provided by a server, a client, or both, and is used to create a shared key for encrypting and decrypting data.)

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

WCF предлагает три разных уровнях защиты, которые определяют, каким образом сообщения, защищенные с использованием безопасности сообщений SOAP.WCF offers three different protection levels that determine how messages are secured using SOAP message security. По умолчанию используется SignBeforeEncryptAndEncryptSignature.The default is SignBeforeEncryptAndEncryptSignature. На этом уровне к сообщению сначала добавляется сигнатура, затем шифруется текст сообщения, после чего шифруется XML-сигнатура.This setting first signs the message, encrypts the message body, and then encrypts the XML signature. Такой подход снижает вероятность взлома сигнатуры путем ее подбора.This reduces the likelihood of a successful cryptographic guessing attack against the signature.

Однако выбранный по умолчанию уровень безопасности отрицательно влияет на производительность.However, using the default has performance implications. В результате за повышенную безопасность приходится расплачиваться пониженной производительностью.In effect, there is a tradeoff of performance for increased security. Шифрование сигнатуры может привести к падению производительности на 10–40%.Encrypting the signature can decrease performance between 10 percent and 40 percent. Если содержимое сообщения не представляет особой ценности, а производительность гораздо более значительным, используйте SignBeforeEncrypt.If the data content of the message is of low value, and performance throughput is more significant, use SignBeforeEncrypt. При выборе этого значения хэш-код сигнатуры передается открытым текстом, что при низкой энтропии делает сообщения более уязвимыми к взлому путем подбора сигнатуры.With this setting, the signature digest is sent in clear text, and thus the message is more vulnerable to guess-and-verify attacks on low entropy.

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

Чтобы изменить значение свойства MessageProtectionOrder, необходимо создать настраиваемую привязку безопасности.To change the MessageProtectionOrder property requires the creation of a custom security binding. Дополнительные сведения о создании пользовательских привязок см. в разделе параметрах привязок.For more information about creating custom bindings, see Creating User-Defined Bindings. Дополнительные сведения о создании пользовательской привязки для конкретного режима проверки подлинности, см. в разделе как: создание SecurityBindingElement для режима проверки подлинности указан.For more information about creating a custom binding for a specific authentication mode, see How to: Create a SecurityBindingElement for a Specified Authentication Mode.

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

Дополнительно