.net 为什么在net.tcp上启用SSL(传输安全性)比在HTTP上启用要困难得多?

.net 为什么在net.tcp上启用SSL(传输安全性)比在HTTP上启用要困难得多?,.net,wcf,ssl,nettcpbinding,.net,Wcf,Ssl,Nettcpbinding,通过HTTP上的WCF实现使用传输级安全性的web服务非常简单: 通过WCF over net.tcp实现使用传输级安全性的web服务相当困难: 。。。而net.tcp解决方案通常在服务器端和客户端都包含类似的内容: <serviceCertificate findValue="MyServiceCertificate" storeLocation="LocalMachine" storeName="My" x509FindType

通过HTTP上的WCF实现使用传输级安全性的web服务非常简单:

通过WCF over net.tcp实现使用传输级安全性的web服务相当困难:

。。。而net.tcp解决方案通常在服务器端和客户端都包含类似的内容:

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

在HTTP情况下,您甚至不需要在客户端或服务器上提及证书。在NET.TCP的情况下,您必须在我读到的大多数源中的客户端和服务器上存储、定位和指定证书


是什么让你不用担心HTTP模式下的证书?还有,为什么在使用net.tcp时,这种魔力不可用呢?

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

编辑


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

我也为此拼命挣扎,现在终于觉得自己像个白痴了。这很好,因为这意味着我真的理解了一些我之前刚刚破解过的东西

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

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

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

配置内部和另一个:

<security mode="None" />

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


需要注意的一点是,对于任何产品版本,都应该使用元数据绑定。这可以确保您不会公开任何未通过SSL的内容。

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