我有一个使用net.TCP绑定的WCF服务,此服务可以在局域网内或通过互联网使用。
我已经读过net.TCP默认使用传输级安全性,但是这种安全性是点对点的,我认为如果我使用我的客户端出局我的局域网,通过互联网和通信使用很多点,也许这一点如果没有安全性,点不会传输消息。这是对的吗?
那么如果我也需要消息安全性呢?我可以使用ssl证书x509加密每条消息,只有我的具有私钥的服务才能解密?
是否有一些文档解释了如何使用net.TCP绑定证书?我可以使用open ssl创建我的证书并将其与WCF一起使用吗?
感谢。
答案 0 :(得分:3)
首先,这两种方法都是安全的,足以满足90%的情况。传输安全性可保护您的通信通道,但不会加密您的实际消息。邮件安全性会加密您的实际邮件,因此邮件传递的服务器无法查看邮件内容,并且需要私钥才能解密邮件。所以有人可能会说消息安全更安全,至少它更适合互联网通信。 WCF安全性的一些好的链接: Message Security in WCF和patterns & practices Improving Web Services Security Guide
netTcpBinding
默认使用传输安全性,但这并不意味着您不能使用Message安全性。传输安全性比Message安全性(每个消息都加密)具有更少的计算开销,因此它具有更好的性能。在互联网上使用netTcpBinding
的一个警告是,它可能无法保证始终有效(过去我successfully
通过互联网设置netTcpBinding
因为它使用一些用于消息传输的端口并不总是保证由网络路由器和防火墙保持打开(通过互联网,您的消息将通过许多路由器和防火墙。)对于Internet通信,请考虑其中一个HTTP绑定,例如{{ 1}}或basicHttpBinding
也支持邮件安全。
您可以像在其他绑定中一样使用Message安全性:
wsHttpBinding
然后将端点上的<netTcpBinding>
<binding name="securedBinding">
<security mode="Message">
</security>
</binding>
</netTcpBinding>
设置为bindingConfiguration
。
在托管服务的机器上(服务器):
securedBinding
如果您的客户有限且您知道他们是谁,您可以使用自签名证书。但是,如果您希望获得最佳安全性,许多未知客户端会使用您的服务,那么最好从已知的CA购买一个。然后,您需要在服务器计算机上安装服务器证书。 Here是一篇关于如何使用证书保护服务的文章,该博客还有一些您可能想要阅读的其他有用的WCF安全文章。