默认情况下,消息已签名和加密,签名经过数字签名。 你可以对此进行控制,方法是用 AsymmetricSecurityBindingElement 或 SymmetricSecurityBindingElement 的实例创建一个自定义绑定,然后将其中一个类的 MessageProtectionOrder 属性设置为一个 MessageProtectionOrder 枚举值。 默认值为 SignBeforeEncryptAndEncryptSignature。 此过程比单纯签名和加密多花费10%到40%的时间。 但是,禁用签名加密可能会允许攻击者猜测消息的内容。 这是可能的,因为签名元素包含消息中每个已签名部件的纯文本的哈希代码。 例如,尽管消息正文默认加密,但未加密的签名包含消息正文的哈希代码。 如果消息较小,攻击者可能能够推断内容。 加密签名可减少或消除这种可能性。
因此,仅在内容值较低时禁用签名的加密,例如,发送没有安全影响的大型二进制文件时,性能提升将显著。
禁用数字签名
- 创建一个 CustomBinding。 有关详细信息,请参阅 如何:使用 SecurityBindingElement 创建自定义绑定。 
- 向绑定集合中添加AsymmetricSecurityBindingElement或SymmetricSecurityBindingElement中的一个。 
- 将 AsymmetricSecurityBindingElement.MessageProtectionOrder 属性设置为 SignBeforeEncrypt,或将 SymmetricSecurityBindingElement.MessageProtectionOrder 属性设置为 SignBeforeEncrypt。 
有关创建自定义绑定的详细信息,请参阅 创建 User-Defined 绑定。 有关为特定身份验证模式创建自定义绑定的详细信息,请参阅 如何:为指定的身份验证模式创建 SecurityBindingElement。