首先,这两种方法都是安全的,可以满足 90% 的情况。传输安全保护您的通信渠道,但不会加密您的实际消息。消息安全加密您的实际消息,因此消息通过的服务器无法看到消息内容,并且需要私钥来解密您的消息。所以有人可能会说消息安全更安全,至少它更适合互联网通信。关于 WCF 安全性的一些好的链接:WCF
中的消息安全以及模式和实践改进 Web 服务安全指南
netTcpBinding
默认情况下使用传输安全性,但这并不意味着您不能使用消息安全性。传输安全性比消息安全性(每条消息都被加密)具有更少的计算开销,因此它具有更好的性能。通过 Internet使用的一个警告netTcpBinding
是,它可能无法保证始终工作(尽管过去我已经通过 Internet 进行successfully
设置netTcpBinding
),因为它使用一些端口进行消息传输,这些端口并不总是保证由网络路由器和防火墙(通过 Internet,您的消息将通过许多路由器和防火墙。)对于 Internet 通信,请考虑 HTTP 绑定之一,例如basicHttpBinding
也wsHttpBinding
支持消息安全的 或。
您可以像在其他绑定中一样使用消息安全性:
<netTcpBinding>
<binding name="securedBinding">
<security mode="Message">
</security>
</binding>
</netTcpBinding>
然后将bindingConfiguration
端点上的 设置为securedBinding
.
在托管您的服务的机器(服务器)上:
<behavoirs>
<serviceBehavior>
<behavior name="securityBehaviour">
<serviceCredentials>
<serviceCertificate
findValue="serviceCert"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavoir>
</serviceBehavior>
</behavoirs>
<services>
<service name="Service1" behaviorConfiguration="securityBehaviour">
<endpoint address="" binding="netTcpBinding" contract="IService1" bindingConfiguration="securedBinding">
</endpoint>
</service>
</services>
如果您有有限的客户并且您知道他们是谁,您可以使用自签名证书。但是,如果您希望在许多未知客户端使用您的服务时获得最佳安全性,您最好从已知 CA 购买一个。然后,您需要在服务器机器上安装服务器证书。 这是一篇关于如何使用证书保护您的服务的文章,该博客还有一些您可能想阅读的其他有用的 WCF 安全文章。