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