MessageProtectionOrder Перечисление
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Указывает порядок операций при защите сообщения.
public enum class MessageProtectionOrder
public enum MessageProtectionOrder
type MessageProtectionOrder =
Public Enum 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 для указанного режима проверки подлинности.
Применяется к
См. также раздел
- MessageProtectionOrder
- AsymmetricSecurityBindingElement
- SymmetricSecurityBindingElement
- Практическое руководство. Создание пользовательской привязки с помощью элемента SecurityBindingElement
- Создание определяемых пользователем привязок и элементов привязки
- Практическое руководство. Создание элемента SecurityBindingElement для указанного режима проверки подлинности
- Шифрование цифровых сигнатур