MessageProtectionOrder 枚举
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
指定保护消息的运算顺序。
public enum class MessageProtectionOrder
public enum MessageProtectionOrder
type MessageProtectionOrder =
Public Enum MessageProtectionOrder
- 继承
字段
EncryptBeforeSign | 2 | 指定先加密 SOAP 消息,再为其生成数字签名。 |
SignBeforeEncrypt | 0 | 指定先为 SOAP 消息生成数字签名,再加密 SOAP 消息的所有部分,但不加密数字签名。 |
SignBeforeEncryptAndEncryptSignature | 1 | 指定先为 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.MessageProtectionOrder 的 AsymmetricSecurityBindingElement 属性和 SymmetricSecurityBindingElement.MessageProtectionOrder 类的 SymmetricSecurityBindingElement 属性一起使用。
例如,如果消息容易受到摘要攻击 (,如果消息短或) 的熵较低,则应使用 SignBeforeEncryptAndEncryptSignature 或 EncryptBeforeSign 选项。 (Entropy 是由服务器和/或客户端提供的随机数据,用于创建用于加密和解密数据的共享密钥。)
已对哪些内容进行排序?
WCF 提供三种不同的保护级别,用于确定如何使用 SOAP 消息安全性保护消息。 默认值为 SignBeforeEncryptAndEncryptSignature。 此设置首先签名消息,加密消息正文,然后加密 XML 签名。 这就降低了成功加密猜测攻击签名的可能性。
但是,使用默认值会影响性能。 实际上,增加了安全性就会使性能打折扣。 加密签名可能会降低 10% 到 40% 的性能。 如果消息的数据内容值较低,并且性能吞吐量更高,请使用 SignBeforeEncrypt。 使用此设置,签名摘要将以明文形式发送,因此该消息更易受到低平均信息量的猜测和验证攻击。
仅自定义绑定
若要更改 MessageProtectionOrder
属性,则需要创建自定义安全绑定。 有关创建自定义绑定的详细信息,请参阅创建用户定义的绑定。 有关为特定身份验证模式创建自定义绑定的详细信息,请参阅如何:为指定的身份验证模式创建 SecurityBindingElement。