17

我有一个 WCF 服务和客户端,它将部署到几家公司(数百家)。一些公司将在他们的网络中运行该软件,而一些公司将通过 Internet 运行它(WCF 服务器在办公室,WCF 客户端在另一个)。

我们要加密 WCF 服务器和客户端之间的通信。我们不需要使用 WCF 安全性对 cient / 订阅者进行身份验证,因为我们有自己的用户名/密码登录,客户端将使用该用户名/密码登录服务器。

  • 我们不能依赖 Windows 身份验证,因为一些用户会通过 Internet 运行它,而且 WCF 服务器可能与 WCF 客户端不在同一个域中。
  • 如果我们使用“真实”证书*,运行该软件的公司将不得不从 CA 购买证书并安装它,然后配置我们的软件以使用它,但这对大多数人来说太复杂了。
  • 我们可以在安装 WCF 服务器的过程中自动创建证书,但是我们必须自动将其安装到证书存储中,并以某种方式自动授予 IIS 读取证书的权限。这比我们想要的要复杂。

简而言之,我们想要一个简单的解决方案,其中加密仅基于共享密钥,在我们的例子中是用户登录时使用的用户名/密码。我明白这不会提供最好的可用加密,但我们愿意交换一些安全性以使软件更易于部署。

这可能吗?

*对于“真实”证书,我的意思是从证书颁发机构购买的证书,而不是我自己创建/自签名的证书。

4

5 回答 5

17

如果你想加密传输中的消息(这是一个非常好的主意!),发送者(客户端)和服务器之间必须有一些共享的知识。这可以是硬编码的,但这根本不是一个好主意——如果“共同共享”的知识被泄露,攻击者可以破译并阅读你的所有消息。

此外,由于绝对推荐这种做法,因此 WCF 中不支持任何类型的来简化共享密钥的使用。你是靠自己的——你必须100%自己动手。

以安全方式交换公共共享秘密的唯一可行方法是使用证书。没办法,抱歉。证书甚至不必用于用户身份验证或其他任何事情 - 但它在调用者和服务之间建立了一个共享秘密,因此允许调用者以只有预期接收者才能实际解密和使用的方式加密消息他们。

因此,我真的看不出有任何方法可以绕过在服务器上安装证书 - 不需要在每个客户端上,而是在运行服务的每台服务器上。

马克

PS:如果你真的想研究“硬编码共享密钥”的方法,你需要考虑这个:

  • 您如何在每个客户上安全地存储共享秘密?
  • 您如何使用存储的共享密钥中的信息来加密您的消息?

通常,该方法有两个方面:

  1. 交换某种形式的私钥/公钥对;服务器生成一个密钥对并将私钥保存给自己并与客户端共享公钥(例如,通过 WCF 消息)
  2. 使用该私钥/公钥对,交换一个共同的共享秘密,例如一个“加密密钥”,它将对称地加密您的消息(并且由于它是对称的,服务器可以使用相同的密钥来解密消息)
  3. 在您的客户端上设置基础架构(例如,称为行为的 WCF 扩展)以在消息发出之前检查消息并使用您的共享密钥对其进行加密

总而言之,这真的不是微不足道的——任何比这更简单的东西都不值得被称为“安全”。

如果你看看你必须做的所有工作 - 使用 WCF 内置证书机制不是更容易吗?

物有所值的安全很难的——所以为什么不利用可用的东西而不是自己做所有的工作,或者更糟:想出一个很容易破解的半生不熟的解决方案,你可以轻松地以明文形式发送所有内容...... .. 不要低估处理最基本的安全场景所需的代码的复杂性和数量 - WCF 为您完成这一切 - 免费且以可靠和安全的方式 - 使用它!你不会后悔的!

于 2009-10-15T09:11:10.907 回答
3

好吧,使用 WCF,您可以在消息级别使用密码凭据,在传输级别使用 SSL,我认为这在您的情况下就足够了。

这里

于 2009-10-15T08:26:43.220 回答
1

为了消息安全,您的客户端提供一些凭据,服务器提供一些凭据。对于此设置和您的方案,您是否可以不使用客户端用户名和密码以及自定义用户名验证器和服务器证书来提供服务器凭据。此应用程序场景提供了实现此目的所需的配置设置,除了 aspNet 成员部分,您必须将其替换为自定义验证配置。

您仍然需要服务器上的有效证书(客户端不需要证书),但我看不出有任何解决方法。

于 2009-10-19T08:47:07.137 回答
1

嗯..也许可以使用一些简单的东西。将加密从软件转移到硬件。从每个客户端网络到您自己的 VPN,然后您可以为 WCF 传输做任何您喜欢的事情。该行不是明文,问题解决。

当然,这说起来容易做起来难,但大多数网络供应商都提供了一个非常简单的 VPN 配置,它可能比尝试为 SSL 证书开发安装程序和配置客户端更容易。

我希望它有帮助!

于 2012-07-12T12:32:42.300 回答
1

请看以下示例:

http://www.codeproject.com/KB/WCF/wcfcertificates.aspx

它使用证书但没有证书存储 - 所以不需要设置。

于 2011-06-14T14:32:05.380 回答