【问题标题】:Implementing WCF Service using HTTP protocol with encryption使用带有加密的 HTTP 协议实现 WCF 服务
【发布时间】:2014-01-16 07:07:17
【问题描述】:

我需要使用带有加密的 HTTP 协议来实现 WCF 服务。消息或传输安全都可以。我是否需要使用 x509 证书来达到加密的安全要求?还是有别的办法?

【问题讨论】:

  • 您只需要一个共享密钥即可实现加密。您如何计划客户端和服务器同意/获取秘密?您确定该服务的用户会信任它,因为它使用的是 HTTP 而不是 HTTPS。大多数(非技术人员)人只是假设 HTTP 不安全,HTTPS 安全。
  • 某种共享密钥就足够了。我正在做一个试点项目,由于时间限制,我不确定我是否能够正确实施证书 + SSL 安全性。我正在寻找一种最快的方式来满足使用 HTTP 协议的加密要求。

标签: c# .net wcf web-services wsdl


【解决方案1】:

您需要使用传输安全性,而不是消息安全性。传输安全就像常规的 https 加密一样工作——事实上,您主机的 URL 将是 https。设置和正确配置证书和程序有点复杂,但传输比消息安全具有很大优势。

使用消息安全,您必须在每台客户端计算机上手动安装 x509 证书的公钥文件,并在主机上手动安装公钥和私钥,以使消息安全正常工作。这意味着很多额外的工作 - 即所有客户端证书文件安装。此外,由于消息安全性是基于 SOAP 的,您必须按照 SOAP 行编写所有代码,这使得 REST 编程变得困难或不可能。

使用 Transport,您无需在每台客户端计算机上安装证书公钥的副本;就像普通的 https 网络服务器一样,主机将公钥传输给它首先建立连接的客户端。

这是一篇关于 https over wcf 的不错的操作指南文章的链接:http://www.codeproject.com/Articles/36705/Seven-simple-steps-to-enable-HTTPS-on-WCF-WsHttp-b

【讨论】:

  • 没有证书时使用密钥文件更好?
  • 密钥文件是证书……证书有两部分,公钥和私钥。当您登录 https 站点时,您将获得由主机服务器发送到您的浏览器的公钥副本。您的浏览器将使用公钥(驻留在浏览器内存中)在自己和主机之间创建一个加密的“隧道”。只有主机拥有私钥。
  • 现在,如果您在 WCF 上使用 HTTPS,则该过程是相同的 - 主机将在握手过程中自动将证书的公钥部分发送给客户端。但是,如果您使用消息安全性,则必须将公钥作为文字文件加载到客户端并进行注册。这就是消息安全的糟糕之处。客户端所需的所有管理。
  • 如果您只有 1 或 2 个客户端(也许是服务器)需要与异地服务器进行加密通信,这真的没什么大不了的。消息安全在这种情况下有效。但是,如果 WCF 主机应该与那里的 10k 便携式设备通信,那么您就遇到了一个真正的问题,因为在这 10k 计算机上管理所有这些证书的分发和安装将比其他所有的工作更麻烦、更令人头疼项目的总和。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 2016-08-09
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 2014-04-14
相关资源
最近更新 更多