使用传输安全性时是不是需要用于 WCF 的 SSL?

Posted

技术标签:

【中文标题】使用传输安全性时是不是需要用于 WCF 的 SSL?【英文标题】:Is SSL for WCF needed when using Transport Security?使用传输安全性时是否需要用于 WCF 的 SSL? 【发布时间】:2011-08-31 11:18:09 【问题描述】:

好的,我的 WCF 配置可能太过分了,无法透过树木看到森林,所以我想检查安全性。

我在 WCF 服务中公开了 (2) 个绑定,用于客户端使用的选项:netTcpBinding 和 wsHttpBinding(都可以正常工作)。我都配置了默认值:clientCredentialType="Windows"。我将 wsHttpBinding 配置为使用 SSL 证书并通过 https 公开端点(我想要这个),并且还为 netTcpBinding 配置了一个 SSL 证书以使用 SSL over TCP(我也想要这个)。

这是我不断得到混合信息的地方。显然,“传输”安全性本质上是安全的。这是否意味着如果我想保护传输层的安全,我确实不需要需要 SSL 证书?

【问题讨论】:

【参考方案1】:

我必须在多篇文章之间进行大量阅读才能从原始帖子中获得我正在寻找的详细信息。帮助我弄清楚的信息如下:

每种协议(TCP、HTTP、MSMQ、NamedPipes)都有自己的机制来传递凭据和处理消息保护。

以上来自WCFSecurityGuide

来自主要的网络背景,我非常了解 HTTP 并使用 SSL 证书保护它。但是,在 Windows 环境中,net.tcp 不需要这个确切的过程,net.tcp 在 Windows 中使用自己的方法来保护传输层。

所以当它开始时,这里是我想了解的关于在 Windows 环境中保护 HTTP 绑定和 net.tcp 的 (2) 解释:

对于 net.tcp: 使用 Windows 身份验证对服务和客户端进行身份验证,并通过 Windows 安全性在传输级别保护消息

对于 HTTP 绑定(即 wsHttpBinding): 当使用 HTTP 绑定时,传输安全性由 SSL 提供。 SSL 证书用于提供消息保护。

所以我不需要 需要用于 net.tcp 绑定的 SSL 证书,因为它由 Windows 安全性处理,并且在使用传输安全性时具有固有的安全性。使用 wsHttpBinding 时,我仍然需要使用我之前提到的 SSL 证书来保护传输,并通过 HTTPS 公开绑定。

如果任何未来的读者有类似的问题,我发布的 WCF 指南链接和下面的链接是一个很好的起点:

常见的 WCF 安全方案:http://msdn.microsoft.com/en-us/library/ms730301.aspx

【讨论】:

好总结!明确地说,此配置的“消息保护”意味着建立了一个加密通道(传输),通过该通道将消息传输到服务。消息本身是加密的,因此不需要加密,因为通道是安全的。 WCF 还具有消息级别的安全性(在此配置中启用)对消息本身进行加密,因此它可以通过不安全的通道传输或通过中介传递,从而损害消息的内容。 谢谢!来自 WCFSecurityGuid (p.127) 的一些信息,用于详细说明安全模式及其描述::不提供安全性;你不应该使用这个选项。 传输:在传输级别提供相互身份验证和消息保护。 消息:在消息级别提供相互身份验证和消息保护。 两者:在传输和消息级别都提供相互身份验证和消息保护。这远远超出了大多数场景的需要。 cont... TransportWithMessageCredential:在消息层提供客户端认证,在传输层提供消息保护和服务认证。 TransportCredentialOnly:在传输级别提供相互身份验证,但不提供消息保护。 @SixtoSaez 只是为了超级澄清:这是否意味着欺骗(或掌握)Windows 身份验证的黑客可以读取并可能更改客户端和服务之间的消息流量? 抱歉,今天才注意到这一点。是的,绝对可以,他们可以更改消息。您正在描述经典的“中间人”(MITM)妥协。消息级别的加密可以缓解 MITM 攻击。消息级加密独立于传输通道加密,因此您可以在 WCF 中同时应用两者。【参考方案2】:

在此设置中,“传输”安全性是您告诉 WCF 您确实希望它使用 SSL 的方式。为了使 SSL 工作,您需要客户端可以验证的服务器证书(来自签名机构或您安装在客户端上的自签名证书)。

所以你做对了。 :)

【讨论】:

感谢您的回复,非常感谢。我还是有点困惑(我看了你的回复好几遍);所以说对了,我确实需要 SSL 证书,因为它本质上是安全的,还是我确实需要它?我正在尝试查找一篇好的 MSDN 文章(我现在有大约 10 篇打开的文章),试图解释传输安全性及其与 SSL 的关系,以确保 Windows 凭据设置环境中的安全性。我想我有所有的链接,仍然试图了解应用 SSL(当需要安全性时)是否对我的设置有意义。谢谢! 相信我对 wsHttpBinding 已经很清楚了。为了保护传输,您应该使用已配置的 SSL 证书通过 https 公开绑定。完毕。如果可以证实这一点,我对此很满意。我仍然感到困惑的是 net.tcp 绑定。我在某些地方读到此绑定的安全性是由操作系统提供的(传输模式的安全性是通过在 TCP 上实现传输层安全性 (TLS) 来提供的。TLS 实现是由操作系统提供的),还有一些人说:对于 TCP,它是基于 TCP 或 Windows 的 SSL。所以在 net.tcp 绑定上仍然有些混乱。 您需要服务器证书才能使用 SSL。证书是客户端如何知道他们从服务器获得的消息真的来自服务器并且在传输过程中没有被拦截和更改。 net.tcp 正在使用 TLS,如 here 所述。 是的,这就是我今天早上看到的相同链接。我没有在其中阅读任何具体解释“TLS”的内容(Windows 安全,是的),但它是我在后续回答中制作的论坛化 cmets 的来源。

以上是关于使用传输安全性时是不是需要用于 WCF 的 SSL?的主要内容,如果未能解决你的问题,请参考以下文章

WCF传输协议

WCF 身份验证

SSL/TLS原理详解与WCF中的WS-Security

IIS 托管具有 SSL 安全性的 WCF -“HTTP 请求被客户端身份验证方案‘匿名’禁止”错误

WCF 消息安全证书

将 wsHttpBinding SSL 传输安全与消息安全结合使用有啥好处吗?