【问题标题】:Why is it so much harder to enable SSL (Transport security) over net.tcp than HTTP?为什么通过 net.tcp 启用 SSL(传输安全)比启用 HTTP 困难得多?
【发布时间】:2011-06-22 18:50:19
【问题描述】:

通过 HTTP 上的 WCF 实现使用传输级安全性的 Web 服务非常简单:Enable SSL for my WCF service

使用 WCF over net.tcp 实现使用传输级安全性的 Web 服务非常困难:WCF with netTcpBinding and Certificate transport security

...而 net.tcp 解决方案通常在服务器端和客户端都涉及到这样的事情:

 <serviceCertificate
       findValue="MyServiceCertificate"
       storeLocation="LocalMachine"
       storeName="My"
       x509FindType="FindBySubjectName" />

在 HTTP 案例中,您甚至不需要提及客户端或服务器上的证书。在 NET.TCP 案例中,您必须在我读过的大部分资源中的客户端和服务器上存储、定位和指定证书。

是什么使您不必担心 HTTP 模式下的证书?而且,为什么在使用 net.tcp 时无法使用这种魔法?

【问题讨论】:

  • 有什么具体原因不能使用消息级安全性吗?
  • 没有具体原因我们不能使用消息级安全性。不过,我不知道为什么这样做会更容易实现。

标签: .net wcf ssl nettcpbinding


【解决方案1】:

因为在通过 HTTPS 使用 WCF 时; IIS 管理与证书的协商(就像普通 SSL)。由于没有内置用于 TCP 的 IIS 服务器,因此您必须自己做。您仍在为 HTTPS 使用证书 + WCF,但配置是在 IIS 上完成的。

编辑

对于客户端,您还有另一个软件。通过 SSL 浏览网站时,浏览器会为您处理所有这些。 SSL over HTTP 具有标准协商模式,因为它是 HTTPS 协议的一部分。对于 TCP,这不是协议的一部分,因此客户端必须自己处理。

【讨论】:

  • 这是我在服务器端的假设,但它只解释了服务器端。它没有解释为什么事情在客户端更难。为什么我阅读的所有示例都涉及在客户端存储中存储证书并调用 SetCertificate (like here)
  • 这几乎是有道理的,除了两点。首先,浏览器确实会为您处理所有这些,但即使您不使用浏览器(只是带有 WCF 客户端代码的 Windows 窗体应用程序),它仍然会为您处理这些。因此,微软必须为我们处理它。他们只是选择在 net.tcp 案例中不为我们处理?最后,如果您接受所有这些,那么 TCP 的额外工作似乎是实现您自己的证书处理。相反,我们看到的是人们在客户端上安装了一个甚至没有出现在 HTTP 案例中的全新证书。
  • @Greg:Microsoft 并没有完全为您解决这个问题。 HTTPS 协议的本质是支持协商。这是标准的一部分,每个人都同意它的工作原理。然而,TCP 没有这样的规范,它是一个较低级别的协议。 可以微软为您处理吗?当然。但这会使互操作性变得更加困难。最好让客户自己处理。 SSL 有一个临时密钥规范;所以客户端不需要永久安装。
【解决方案2】:

我也为此苦苦挣扎,现在终于觉得自己像个白痴。这很好,因为这意味着我实际上理解了我以前只是在乱搞的东西。

在实施服务时,您的目标是使用 SSL 保护通信。您还需要能够在 Visual Studio 中生成您的 reference.cs 文件。您遇到的问题是当您也将元数据交换置于 SSL 绑定之下时。代码生成工具不允许您为在生成 reference.cs 文件时为获取元数据而进行的调用配置必要的 netTcpBinding 配置部分。

您应该在 netTcpBinding 下创建两个单独的绑定配置,一个用于您的服务:

<security mode="TransportWithMessageCredential">
    <message clientCredentialType="Certificate"/>
</security>

在里面配置,另一个用:

<security mode="None" />

相反。确保所有其他设置匹配,并且您的服务端点位于 ssl bindingConfig,而元数据端点指向无 SSL 绑定。然后,您将能够读取元数据并再次更新服务引用。

需要注意的一点是,您应该为任何产品版本取出元数据绑定。这可确保您不会暴露任何未通过 SSL 的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-20
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多