WCF安全性:TransportWithMessageCredential和消息安全模式的区别

7
我想知道在WCF安全方面,TransportWithMessageCredentialMessage的区别。
我所知道的是:
- 传输安全:用于在两个端点之间提供点对点的安全性。 - 消息安全:它提供端到端的安全性。因为消息安全直接加密和签名消息,所以中间件不会破坏安全性。
如果我们使用TransportWithMessageCredential模式,SOAP消息(Header和Body)是否被加密?
我的担忧是我希望在WCF服务器和我的WinForms客户端之间加密应用程序数据。

可能是WCF传输 vs 消息的重复问题。 - tom redfern
我不认为它是重复的。我需要知道TransportWithMessageCredentials和message之间的区别。你所提到的是Transport vs Message。 - Harshadaa Harsha
我需要知道的是,如果我们使用TransportWithMessageCredentials模式,SOAP消息(头和正文)是否被加密?我的担忧是我希望在WCF服务器和Windows表单客户端之间加密应用程序数据。 - Harshadaa Harsha
1个回答

9
如果我们使用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结合了传输和消息安全,因为传输安全不仅对消息进行加密和签名,还对服务向客户端进行身份验证,而消息安全用于对客户端进行身份验证。

你说:“当SOAP消息从客户端发送到服务时,它是加密的”,那么它应该是端到端的安全性。为什么只是点对点的安全性? - Harshadaa Harsha
我能否得出结论,TransportWithMessageCredential提供点对点安全和消息级安全提供端到端安全。那么为什么WCF安全指南建议在使用互联网上的Windows表单客户端时使用TransportWithMessageCredential和UserName? - Harshadaa Harsha
我有一个客户端(Win窗体应用程序),将通过互联网连接WCF。我希望我的客户端SOAP消息应该被加密并发送到服务器,以便没有人可以篡改我的应用程序数据在SOAP消息体中。 - Harshadaa Harsha
如果消息正文没有使用TransportWithMessageCredential进行加密,那么为什么微软会说TransportWithMessageCredential是Transport和Message安全性的结合? - Harshadaa Harsha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接