MessageProtectionOrder 枚举

定义

指定保护消息的运算顺序。

public enum class MessageProtectionOrder
public enum MessageProtectionOrder
type MessageProtectionOrder = 
Public Enum MessageProtectionOrder
继承
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.MessageProtectionOrderAsymmetricSecurityBindingElement 属性和 SymmetricSecurityBindingElement.MessageProtectionOrder 类的 SymmetricSecurityBindingElement 属性一起使用。

例如,如果消息容易受到摘要攻击 (,如果消息短或) 的熵较低,则应使用 SignBeforeEncryptAndEncryptSignature 或 EncryptBeforeSign 选项。 (Entropy 是由服务器和/或客户端提供的随机数据,用于创建用于加密和解密数据的共享密钥。)

已对哪些内容进行排序?

WCF 提供三种不同的保护级别,用于确定如何使用 SOAP 消息安全性保护消息。 默认值为 SignBeforeEncryptAndEncryptSignature。 此设置首先签名消息,加密消息正文,然后加密 XML 签名。 这就降低了成功加密猜测攻击签名的可能性。

但是,使用默认值会影响性能。 实际上,增加了安全性就会使性能打折扣。 加密签名可能会降低 10% 到 40% 的性能。 如果消息的数据内容值较低,并且性能吞吐量更高,请使用 SignBeforeEncrypt。 使用此设置,签名摘要将以明文形式发送,因此该消息更易受到低平均信息量的猜测和验证攻击。

仅自定义绑定

若要更改 MessageProtectionOrder 属性,则需要创建自定义安全绑定。 有关创建自定义绑定的详细信息,请参阅创建用户定义的绑定。 有关为特定身份验证模式创建自定义绑定的详细信息,请参阅如何:为指定的身份验证模式创建 SecurityBindingElement

适用于

另请参阅