使用netTcpBinding时实现加密的最简单方法是什么?

8

我正在实现一个WCF服务,该服务将在私有局域网中使用。

我将使用netTcpBinding,并希望在通信中实现某种形式的安全性,更具体地说,重要的是加密数据,以便(例如)没有人可以查看在网络上传输的数据。

我不认为Windows身份验证是适当的,因为最终用户可能不会严格维护他们的Windows登录和角色,以将其用作身份验证。如果我错了,请纠正我。

我的问题是,使用netTcpBinding在WCF服务中实现加密的最简单方法是什么?特别是当Windows凭据类型不可用时。

我尝试过使用证书(使用makecert生成自己的证书),但缺乏教程和文档描述如何从头到尾使用TCP进行此操作并将服务托管在其他内容之外。其中许多教程详细介绍如何生成证书(在这方面没有两个教程完全相同),并以类似以下的方式结束:

使用这些签署服务和客户端

...很遗憾,这就是我需要更多解释的过程!

通常,证书解决方案似乎有点过于复杂,而且有点过于复杂,只是为了实现加密数据!

任何帮助或更正我可能做出的任何假设都将不胜感激。


1
在我们开始之前,使用NetTcpBinding的动力是什么?例如,具有传输安全性(SSL)的BasicHttpBinding是否能胜任任务?(我提到这一点是因为SSL几乎肯定是最容易使用的东西) - Marc Gravell
我想是因为服务和客户端都将在同一局域网内运行,而且各种MSDN文章都指出使用TCP而不是HTTP可以提高性能——再加上我比较熟悉使用TCP和UDP套接字而不是基于Web/http的东西,所以倾向于使用它 :) 不过,并没有严格要求必须使用TCP。 - Lewray
1个回答

2

在评论中的讨论后...

就我的经验而言(我做过很多序列化/WCF工作),NetTcpBinding(和NetDataContractSerializer)的性能“优势”在很大程度上是虚假的。 我从未见过显着的差异,通常普通的http绑定更快。

我建议使用SSL的BasicHttpBinding,这很容易设置且安全。

如果您想要改进性能等,则应将序列化程序切换到类似protobuf-net(声明:我是作者)的内容。 这个 确实 具有易于证明的性能优势,并且在WCF内部工作得非常好(只需更改配置文件),尤其是在BasicHttpBinding上(如果启用MTOM消息编码,则会获得额外的提升,因为它是一种二进制格式)。

个人而言,我从不使用NetTcpBinding;正如已提到的,性能值得怀疑,而且如果发现需要WAN访问,则会使您依赖于无法在basic-http中运行的东西。


谢谢您的回复。考虑到我没有在IIS中托管服务,这仍然容易设置吗?在设计和调试阶段,我是否仍需要经历使用makecert和生成证书的整个过程? - Lewray
@Lewray,你可以在IIS之外进行主机托管,但是是的 - 证书会变得更加棘手。不过有教程可以参考 - 如果我没记错的话,它们正好涵盖了这个问题。 - Marc Gravell
从我的经验来看,我发现BasicHttpBinding只能实现NetTcpBinding的70%,但是我正在处理许多GB的二进制数据。此外,我发现IIS偶尔会出现滞后,使用HTTP绑定时有时会出现极长的响应时间。 - Chris O
@Chris 使用MTOM还是不使用?但是如果你专注于原始字节,那么使用原始字节的net tcp将是可以的,因为在序列化方面几乎是逐字逐句的。当然,如果你关注原始字节,那么套接字会很诱人。 - Marc Gravell
是的,套接字会更好,我们的架构师目前非常喜欢使用WCF解决所有问题;-) 我已经尝试过使用MTOM和不使用MTOM。 - Chris O

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接