如果我们使用TransportWithMessageCredentials模式,SOAP消息(头部和正文)是否会被加密?
是的,因为在TransportWithMessageCredential安全模式下,传输安全提供了在传输过程中保护消息机密性和完整性的功能。在这种情况下,传输安全还提供了服务认证。例如,在HTTP协议中,使用安全套接字层(SSL) 对发送到Secure HTTP(HTTPS)的数据进行加密和签名。
使用TransportWithMessageCredential安全模式时,客户端身份验证是通过SOAP消息安全性来实现的,其中客户端凭据直接放置在消息中。
当SOAP消息离开客户端前往服务时它是被加密的。然而,像传输安全一样,它提供的是端点之间的(而不是端到端的)安全性。因此,如果客户端和服务之间存在中介系统,则每个中间点都必须通过新的安全连接转发消息。
更新:根据评论
你说:“当SOAP消息离开客户端前往服务时它是被加密的,那么它应该是端到端的安全性。为什么只是端点之间的安全性?”
传输安全是端点到端点的,因为当一个消息离开一个端点并在另一个端点上解密时,它是被加密的。在客户端和服务器直接对话的部署中,这提供了全程加密。但是,如果您的服务端点将该消息转发到预期的接收者,则从该点起,您的消息不再保证是加密的。
消息安全直接加密和签名消息,以便只有预期的接收方才能解密并读取实际内容。因此,安全性在发送者和接收者之间得到保证,而不仅仅是在端点之间。
你问:“我可以得出结论:TransportWithMessageCredential提供点对点安全,消息级别安全提供端到端安全。那么当我们使用Windows表单客户端在互联网上使用WCF时,为什么WCF安全指南建议使用TransportWithMessageCredential与UserName?”
是的,这是正确的。TransportWithMessageCredential安全提供点对点安全,而Message安全提供端到端安全。WCF安全指南建议将客户端凭据设置为UserName,因为它将用于验证客户端。在UserName情况下,我们将用户名和密码对放置在SOAP消息中。除非客户端提供某些凭据(如UserName或Certificate)来对其进行身份验证,否则您将拥有匿名客户端。匿名客户端意味着任何人都可以访问您的服务,因为客户端未经过身份验证。
如果消息主体没有使用TransportWithMessageCrendential进行加密,那么为什么Microsoft会称TransportWithMessageCrendential是传输和消息安全的组合呢?
与我的原始答案一样:SOAP消息由传输层(如HTTPS)加密和签名。TransportWithMessageCredential结合了传输和消息安全,因为传输安全不仅对消息进行加密和签名,还对服务向客户端进行身份验证,而消息安全用于对客户端进行身份验证。