WCF 中的消息安全性

Windows Communication Foundation(WCF)有两种主要模式,用于提供安全性(TransportMessage)和第三种模式(TransportWithMessageCredential)组合这两种模式。 本主题讨论消息安全性及其使用原因。

什么是消息安全性?

消息安全性使用 WS-Security 规范来保护消息。 WS-Security 规范介绍了 SOAP 消息传送的增强功能,以确保 SOAP 消息级别的机密性、完整性和身份验证(而不是传输级别)。

简言之,消息安全性与传输安全性不同,它封装安全凭据和声明以及任何消息保护(签名或加密)。 通过修改消息内容将安全直接应用于消息,受保护的消息可以在安全方面进行自包含。 这可实现在使用传输安全性时无法实现的一些方案。

使用消息安全性的原因

在消息级别安全性中,所有安全信息都封装在消息中。 使用消息级安全性(而不是传输级别安全性)保护消息具有以下优势:

  • 端到端安全性。 传输安全性(例如安全套接字层(SSL)仅在通信是点到点时保护消息。 如果在到达最终接收方之前将消息路由到一个或多个 SOAP 中介(例如路由器),则一旦中介从网络读取消息,消息本身就不会受到保护。 此外,客户端身份验证信息仅适用于第一个中介,并且必须在必要时以带外方式重新传输到最终接收方。 即使整个路径在各个跃点之间使用 SSL 加密保护,这仍然适用。 由于消息安全直接处理消息并保护其中的 XML,因此无论在消息到达最终接收方之前涉及多少中介,安全都保留在消息中。 这可实现真正的端到端安全方案。

  • 提高灵活性。 可以对消息的某些部分进行签名或加密,而不是整个消息。 这意味着中介可以查看适用于它们的消息部分。 如果发送方需要使消息中信息的一部分对中介可见,但希望确保它不会被篡改,它只能对其进行签名,但将其保留为未加密。 由于签名是消息的一部分,因此最终接收方可以验证消息中的信息是否完好无损。 一种方案可能有一个 SOAP 中介服务,该服务根据 Action 标头值路由消息。 默认情况下,WCF 不会加密作值,但如果使用消息安全性,则对其进行签名。 因此,此信息可供所有中介使用,但没有人可以更改它。

  • 支持多种传输方式。 你可以通过许多不同的传输(例如命名管道和 TCP)发送受保护的消息,而无需依赖协议以确保安全性。 使用传输级别安全性时,所有安全信息的范围都限定为单个特定的传输连接,并且不能从消息内容本身获取。 消息安全性使消息安全,无论使用何种传输来传输消息,安全上下文都直接嵌入到消息中。

  • 对一组范围广泛的凭据和声明的支持。 消息安全性基于 WS-Security 规范,该规范提供可扩展框架,能够传输 SOAP 消息中的任何类型的声明。 与传输安全性不同,可以使用的一组身份验证机制或声明不受传输功能的限制。 WCF 消息安全性包括多种类型的身份验证和声明传输,并且可以根据需要扩展以支持其他类型。 例如,出于这些原因,如果没有消息安全性,则无法实现联合凭据方案。 有关 WCF 支持的联合方案的详细信息,请参阅联合身份验证令牌与颁发的令牌

消息和传输安全性的比较方式

Transport-Level 安全性的优缺点

传输安全具有以下优点:

  • 不需要通信方了解 XML 级安全概念。 这可以提高互作性,例如,当 HTTPS 用于保护通信时。

  • 总的来说,性能有所改善。

  • 硬件加速器可用。

  • 流媒体是可行的。

传输安全具有以下缺点:

  • 仅支持跃点到跃点。

  • 凭据集合有限且无法扩展。

  • 依赖于传输。

消息级安全的缺点

消息安全性具有以下缺点:

  • 性能

  • 不能使用消息流。

  • 需要实现 XML 级别安全机制并支持 WS-Security 规范。 这可能会影响互作性。

另请参阅