【问题标题】:WCF security TransportWithMessageCredentials with WsHttpBinding带有 WsHttpBinding 的 WCF 安全 TransportWithMessageCredentials
【发布时间】:2015-01-23 08:31:39
【问题描述】:

我有我的网站 (https://example.com)。这是一个互联网应用程序

  1. 用户可以从上述网站注册--完成
  2. 注册用户将收到一封电子邮件,并且可以点击下载 Windows 客户端(WPF 或 Windows 窗体客户端)- 已完成
  3. 此 WPF 或 Windows 窗体客户端将使用托管在 example.com 上的 WCF(部署在 Internet 中)。我在消息正文中内部传递了 UserName 和 Pwd。—已完成

现在我需要知道的是如何在消息级别和传输级别实现安全性。

  1. 客户端请求应在消息级别加密
  2. WCF 服务器响应应在消息级别加密
  3. 客户端和服务器之间的通信应该是 SSL

我已经从msdn.microsoft.com/en-us/library/ff648902.aspx走过

  1. 如何:在从 Windows 窗体调用 WCF 中使用 wsHttpBinding 和用户名身份验证和 TransportWithMessageCredentials
  2. 如何:将用户名身份验证与 SQL Server 成员资格提供程序和 WCF 从 Windows 窗体调用的消息安全性结合使用
  3. 如何:在从 Windows 窗体调用 WCF 中使用证书身份验证和消息安全

阅读以上内容后,我很困惑我需要使用哪一个。请建议哪一个是我的方案的最佳选择,以满足我的上述三个安全条件

如果我使用TransportWithMessageCredentials,我会看到消息级别和传输级别的加密吗?

【问题讨论】:

    标签: .net wcf ws-security


    【解决方案1】:

    TransportWithMessageCredentials 是一种加密/安全选项,当您的 WCF Web 服务框前面有负载平衡器或反向代理时,它会执行 SSL/HTTPS 加密工作。

    在“正常”情况下,您的 WCF Web 服务框位于逻辑 DMZ 内,WCF 主机的加密和客户端身份验证检查在一个步骤中完成,“裸”请求内容(未加密且没有客户端身份验证凭据)由您的服务处理。

    但是,如果您使用负载平衡器或反向代理来执行加密(出于多种原因,这是一个好主意),则使用“正常”传输加密会向您的 WCF Web 服务发送一条消息,而无需客户端身份验证凭据。

    TransportWithMessageCredentials 所做的就是在邮件正文中保留客户端身份验证凭据,以便在 RP/LB 解密您的邮件后,您的 WCF Web 服务可以在第二步中处理您的客户端身份验证请求。

    关注?基本上,如果您使用 F5 负载平衡器或某些反向代理在 WCF Web 服务处理您的消息之前对其进行加密/解密,则需要 TransportWithMessageCredentials。无需负载均衡器或反向代理,无需 TransportWithMessageCredentials。

    希望这可以澄清事情。

    【讨论】:

    • 感谢您的回复。请确认。我的理解正确吗?
    • 我所知道的是有两个安全级别 1. 传输安全:安全是在点对点的基础上应用的,没有提供多跳或通过中间应用程序节点的路由。
    • 2.消息安全性:它提供端到端的安全性。因为消息安全直接对消息进行加密和签名,所以有中间人不会破坏安全性。它允许部分或选择性的消息加密和签名,从而提高整体应用程序性能 感谢您的回复。请确认。我的理解正确吗?因此,使用 TransportWithMessageCredentials 我们可以在传输级别和消息级别(加密整个 SOAP 消息(标头、正文))实现上述两个安全性。
    • 第三种安全模式使用了之前的两种模式,并带来了两者的优点。此模式称为 TransportWithMessageCredential。在这种模式下,消息安全用于验证客户端,传输安全用于验证服务器并提供消息的机密性和完整性。由于这一点,TransportWithMessageCredential 安全模式几乎与传输安全模式一样快,并以与消息安全相同的方式提供客户端身份验证可扩展性。但是,与消息安全模式不同,它不提供完整的端到端安全性。
    • 根据msdn.microsoft.com/en-us/library/ms735093.aspx。 TransportWithMessageCredential 没有提供完整的端到端安全性。正因为如此,我的困惑开始了。我希望我的客户端发送消息,并且它在肥皂消息级别进行加密,并且发送给客户端的服务器消息应该在消息级别进行加密。
    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多