2011-06-22 107 views
6

实现使用传输级安全性与WCF通过HTTP web服务是很容易的:Enable SSL for my WCF service为什么通过net.tcp启用SSL(传输安全性)比HTTP更难?

实施,超过的net.tcp使用传输级安全性与WCF 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时这种魔法不可用?

+0

为什么不能使用消息级安全性有什么具体原因吗? –

+0

我们无法使用消息级安全性没有特定的原因。不过,我不知道为什么这会更容易实施。 –

回答

6

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

编辑

对于客户端,你还有其他的软件。当通过SSL浏览网站时,浏览器正在为您处理所有这些事情。基于HTTP的SSL具有标准的协商模式,因为它是HTTPS协议的一部分。对于TCP,这不是协议的一部分,因此客户端必须自己处理。

+0

这是我在服务器端的假设,但它只解释了服务器端。这并不能解释为什么事情在客户端更难。为什么我读的所有示例都涉及在客户端存储中存储证书并调用SetCertificate [(如此处)](http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/050bc8a9-a9a2 -41dd-89ef-dbacbcc5b111 /)? –

+0

@Greg:查看修改。 – vcsjones

+1

除了两点之外,这几乎是合理的。首先,浏览器确实为您处理了所有这些问题,但即使您没有使用浏览器(只是带有WCF客户端代码的Windows Forms应用程序),它仍然会为您处理。所以,微软必须为我们处理它。他们只是不选择在net.tcp情况下为我们处理它?最后,如果你接受所有这些,那么看起来TCP的额外工作就是实现你自己的证书处理。相反,我们看到的是人们在客户端上安装了全新的证书,甚至没有出现在HTTP案例中。 –

0

我一直都很努力,现在终于觉得自己像个白痴。这很好,因为这意味着我实际上理解了之前我只是在窃听的内容。

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

您应该创建NetTcpBinding的,一个在两个单独的绑定配置为与您的服务:内部

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

配置,另一个为:

<security mode="None" /> 

代替。确保所有其他设置匹配,服务的端点指向ssl bindingConfig,而元数据端点指向无SSL绑定。然后您将能够读取元数据并再次更新服务参考。

需要注意的一件事是,您应该将元数据绑定到任何prod版本。这可确保您不会暴露任何未通过SSL的内容。

相关问题