本部分讨论使用 NetMsmqBinding时 WCF 消息安全性。
注释
在阅读本主题之前,建议阅读 安全概念。
下图提供了使用 WCF 进行排队通信的概念模型。 此插图和术语用于说明
运输安全概念。
使用 WCF 发送排队消息时,WCF 消息作为消息队列(MSMQ)消息的正文附加。 虽然传输安全性保护整个 MSMQ 消息,但消息(或 SOAP)安全性仅保护 MSMQ 消息的正文。
消息安全的关键概念是,客户端保护接收应用程序(服务)的消息,这与客户端保护目标队列消息的传输安全性不同。 因此,使用消息安全性保护 WCF 消息时,MSMQ 不起任何作用。
WCF 消息安全性将安全标头添加到与现有安全基础结构(例如证书或 Kerberos 协议)集成的 WCF 消息中。
消息凭据类型
使用消息安全性,服务和客户端可以提供凭据来对彼此进行身份验证。 可以通过将 Security 模式 Message
设置为或 Both
(即使用传输安全和消息安全)来选择消息安全性。
该服务可以使用 Current 该属性来检查用于对客户端进行身份验证的凭据。 这还可用于服务选择实现的进一步授权检查。
本部分介绍不同的凭据类型以及如何将它们与队列一起使用。
证书
证书凭据类型使用 X.509 证书来标识服务和客户端。
在典型方案中,客户端和服务由受信任的证书颁发机构颁发有效的证书。 然后建立连接,客户端使用服务的证书验证服务的有效性,以确定它是否可以信任该服务。 同样,该服务使用客户端的证书来验证客户端信任。
鉴于队列的断开连接性质,客户端和服务可能不会同时处于联机状态。 因此,客户端和服务必须交换带外证书。 尤其是,由于客户端在其受信任存储区中存有服务的证书(可以将该证书链接到证书颁发机构),因此必须信任它将与正确的服务进行通信。 为了对客户端进行身份验证,服务使用附加了消息的 X.509 证书将其与存储中的证书匹配,以验证客户端的真实性。 同样,证书必须链接到证书颁发机构。
在运行 Windows 的计算机上,证书保存在多种存储中。 有关不同存储库的详细信息,请参阅 证书存储。
Windows操作系统
Windows 消息凭据类型使用 Kerberos 协议。
Kerberos 协议是一种安全机制,用于对域上的用户进行身份验证,并允许经过身份验证的用户与域中的其他实体建立安全上下文。
使用 Kerberos 协议进行排队通信的问题在于,密钥分发中心(KDC)分发的包含客户端身份的票证的有效期相对较短。 生存期与指示票证有效性的 Kerberos 票证相关联。 因此,鉴于高延迟,无法确定令牌对对客户端进行身份验证的服务仍然有效。
请注意,使用此凭据类型时,服务必须在 SERVICE 帐户下运行。
选择消息凭据时,默认使用 Kerberos 协议。
用户名密码
使用此属性,客户端可以使用消息的安全标头中的用户名密码向服务器进行身份验证。
已颁发令牌
客户端可以使用安全令牌服务颁发令牌,该令牌随后可以附加到消息,以便服务对客户端进行身份验证。
使用传输和消息安全性
使用传输安全和消息安全性时,用于保护传输和 SOAP 消息级别的消息的证书必须相同。