使用 netTcpBinding 时,在 WCF 中实现加密的最简单方法是啥?

Posted

技术标签:

【中文标题】使用 netTcpBinding 时,在 WCF 中实现加密的最简单方法是啥?【英文标题】:What is the simplest way to implement encryption in WCF when using the netTcpBinding?使用 netTcpBinding 时,在 WCF 中实现加密的最简单方法是什么? 【发布时间】:2011-08-18 12:28:07 【问题描述】:

我正在实现一个 WCF 服务,该服务将(部分)在专用 LAN 中使用。

我将使用 netTcpBinding 并希望对通信实施某种形式的安全性,更具体地说,对数据进行加密非常重要,这样(例如)没有人可以查看通过网络传输的数据。

我认为 Windows 身份验证不合适,因为最终用户可能没有足够严格地维护他们的 Windows 登录名和角色,无法将它们用作身份验证。我认为这会使其不合适吗?如果我错了,请纠正我。

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

我尝试过使用证书(使用 makecert 生成我自己的证书),但明显缺乏描述如何使用 TCP 从头到尾执行此操作并将服务托管在 IIS 之外的其他东西的教程和文档。他们中的许多人详细地告诉您如何生成证书(在这方面,这些教程中没有两个完全相同)并以类似

的方式结束

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

...不幸的是,这是我需要进一步澄清的过程!

一般来说,证书解决方案似乎太过分了,只是为了获得加密数据有点过分!

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

【问题讨论】:

在我们开始之前;使用 NetTcpBinding 的动力是什么?例如,具有传输安全性 (SSL) 的 BasicHttpBinding 可以完成这项工作吗? (我提到这一点是因为 SSL 几乎可以肯定是“最简单”的工作) 我想是因为服务和客户端都将在同一个 LAN 中运行,并且各种 MSDN 文章指出使用 TCP 而不是 HTTP 可以提高性能 - 以及我更熟悉工作的事实使用 TCP 和 UDP 套接字而不是基于 Web/http 的任何东西,因此由于熟悉而倾向于倾向于它:) 没有严格的要求,这意味着我必须使用 TCP。 【参考方案1】:

在 cmets 的讨论之后...

根据我的经验(我已经完成了很多序列化/WCF 工作),NetTcpBinding(和 NetDataContractSerializer)的性能“好处”在很大程度上是神话般的。我从未见过 显着 的差异 - 通常普通的 http 绑定更快。

我会切换到基于 SSL 的 BasicHttpBinding,它设置简单且安全。

如果您想要提高性能等,我会将序列化程序切换到 protobuf-net 之类的东西(披露:我是作者)。这确实很容易展示了性能优势,并且在 WCF 中运行良好(只需更改配置文件),尤其是优于 BasicHttpBinding(带有如果您启用 MTOM 消息编码,则会获得额外的提升,因为它是二进制格式)。

就个人而言,我从不使用 NetTcpBinding;如前所述,性能值得怀疑,如果您发现需要 WAN 访问,它会让您依赖在基本 http 中不起作用的东西。

【讨论】:

感谢您的回复。考虑到我没有在 IIS 中托管服务,这仍然是微不足道的设置吗?在我的设计和调试阶段,我是否还需要经历使用 makecert 和生成证书的整个过程? @Lewray 您可以在 IIS 之外托管,但是可以 - 证书变得更加棘手。不过,有些教程 - IIRC,正是如此渴望。 根据我的经验,我发现 BasicHttpBinding 只实现了我使用 NetTcpBinding 实现的 70%,但我又一次铲除了许多 GB 的二进制数据。此外,我发现 IIS 时不时地滞后,使用 HTTP 绑定时,您有时会获得极长的响应时间。 @Chris 有或没有 MTOM?但是,是的,在 raw bytes 处,net tcp 就可以了,因为就序列化而言,这几乎是逐字记录的。当然,如果你关注的是原始字节,套接字会很诱人。 是的,套接字会更好,我们的架构师真的很喜欢 WCF 解决目前所有的问题 ;-) 我确实尝试过使用 MTOM 和不使用。

以上是关于使用 netTcpBinding 时,在 WCF 中实现加密的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

BIG IP F5 WCF NetTCpBinding 性能不佳

WCF NetTcpBinding 安全性 - 它是如何工作的?

带有 netTcpBinding 的 WCF 路由服务

使用 netTcpBinding 为 WCF 服务启用基于证书的身份验证

使用 netTcpBinding 的慢(ish)WCF 连接速度

在 WCF-netTCPBinding 中测试 TLS 安全性