我正在研究 WCF 和安全性。有几种安全模式,但总体而言,您可以保护 2 个主要“层”:传输或消息。
有人可以更深入地解释一下吗?当我保护运输时,我必须想象什么,它是如何工作的,等等。
正如您所期望的那样,传输安全保护了传输 - 例如 SSL over HTTP,而消息安全保护了消息。下面是使用消息安全的原因的 msdn 概述:http: //msdn.microsoft.com/en-us/library/ms733137.aspx
以及传输概述:http: //msdn.microsoft.com/en-us/library/ms729700.aspx
(来自消息安全链接):Windows Communication Foundation (WCF) 有两种主要的安全模式(传输和消息)和第三种模式(TransportWithMessageCredential),它结合了两者。本主题讨论消息安全性以及使用它的原因。
什么是消息安全?
消息安全性使用 WS-Security 规范来保护消息。WS-Security 规范描述了 SOAP 消息传递的增强,以确保 SOAP 消息级别(而不是传输级别)的机密性、完整性和身份验证。
简而言之,消息安全与传输安全的不同之处在于,将安全凭证和声明与每条消息以及任何消息保护(签名或加密)一起封装。通过修改其内容将安全性直接应用于消息允许受保护的消息在安全方面是自包含的。这实现了在使用传输安全性时无法实现的某些场景。
使用消息安全的原因
在消息级安全中,所有的安全信息都封装在消息中。使用消息级安全性而不是传输级安全性来保护消息具有以下优点: • 端到端安全性。传输安全性,例如安全套接字层 (SSL),仅在通信是点对点时保护消息。如果消息在到达最终接收者之前被路由到一个或多个 SOAP 中介(例如路由器),则一旦中介从线路中读取消息,消息本身就不受保护。此外,客户端身份验证信息仅对第一个中介可用,并且必须在必要时以带外方式重新传输到最终接收器。即使整个路由在各个跃点之间使用 SSL 安全性,这也适用。因为消息安全性直接与消息一起工作并保护其中的 XML,所以无论在到达最终接收者之前涉及多少中介,安全性都与消息保持一致。这实现了真正的端到端安全方案。
• 增加灵活性。可以对消息的一部分而不是整个消息进行签名或加密。这意味着中间人可以查看消息中为他们准备的部分。如果发件人需要使消息中的部分信息对中间人可见,但又想确保它不被篡改,它可以只签名而不加密。由于签名是消息的一部分,最终接收者可以验证消息中的信息是否完好无损。一种情况可能有一个 SOAP 中介服务,它根据 Action 标头值路由消息。默认情况下,如果使用消息安全性,WCF 不会加密 Action 值,但会对其进行签名。因此,这一信息对所有中介机构都是可用的,但没有人可以改变它。
• 支持多种传输。您可以通过许多不同的传输方式(例如命名管道和 TCP)发送安全消息,而不必依赖协议来确保安全性。使用传输级安全性,所有安全信息都被限定为单个特定的传输连接,并且不能从消息内容本身获得。消息安全性使消息安全,无论您使用何种传输方式来传输消息,并且安全上下文直接嵌入在消息中。
• 支持广泛的凭据和声明。消息安全性基于 WS-Security 规范,该规范提供了一个可扩展的框架,能够在 SOAP 消息中传输任何类型的声明。与传输安全性不同,您可以使用的一组身份验证机制或声明不受传输功能的限制。WCF 消息安全包括多种类型的身份验证和声明传输,并且可以根据需要进行扩展以支持其他类型。由于这些原因,例如,如果没有消息安全性,就不可能实现联合凭据方案。有关 WCF 支持的联合方案的详细信息,请参阅联合和颁发的令牌。
传输安全性,例如安全套接字层 (SSL),仅在通信是点对点时保护消息。如果消息在到达最终接收者之前被路由到一个或多个 SOAP 中介(例如路由器),那么一旦中介从线路中读取消息,消息本身就不会受到保护。
误导。如果使用传输层安全性(服务器端 SSL 证书)加密,网络路由器或交换机(OSI 第 2 层和第 3 层)将无法访问消息内容,因为解密消息需要服务端 SSL 证书。传输层安全保护客户端和预期目标 IP 地址之间的消息,因为假设只有目标服务提供商具有解密消息所需的 SSL 私有证书。如果 SOAP 中介(即 ESB)实际上是与客户端建立加密传输通道的预期消息目的地,那么 SOAP 中介只能读取内容,从而确保从客户端到服务器的安全通道,而不管有多少网络跃点、路由器和交换机等(OSI 第 2 层和第 3 层)。
如果中间件 ESB(预期的 SOAP 中介)需要读取消息的一部分以做出路由决策(基于内容的路由)但不应该能够读取其他消息,则消息级安全性将增加消息的安全性并可以加密消息的一部分只能由下游系统访问的消息的一部分。
使用传输来保护您正在使用的通道,并使用消息来保护您正在发送的消息(内容)。