没有证书和Windows身份验证的WCF消息安全性

时间:2009-10-15 08:05:51

标签: wcf encryption certificate message

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

我们希望加密WCF服务器和客户端之间的通信。我们没有必要使用WCF安全性来验证客户/订户,因为我们有自己的用户名/密码登录,客户端将使用这些登录来登录服务器。

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

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

这可能吗?

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

5 个答案:

答案 0 :(得分:17)

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

此外,由于它肯定是推荐的做法,因此在WCF中不支持任何类型以简化共享密钥。你是自己的 - 你必须自己完成100%的方式。

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

所以我真的没有看到任何方法可以绕过你的服务器上的证书 - 不需要在每个客户端上,而是在你的服务运行的每个服务器上。

马克

PS:如果你真的想调查“硬编码共享秘密”方法,你需要考虑这个问题:

  • 如何在每个客户端安全地存储共享密钥?
  • 如何使用存储的共享密钥中的信息来加密邮件?

通常情况下,方法是双重的:

  1. 交换某种形式的私钥/公钥对;服务器生成密钥对并将私钥保存到自身并与客户端共享公钥(例如,通过WCF消息)
  2. 使用该私有/公共密钥对,交换公共共享密钥,例如,一个“加密密钥”,它将对称加密你的消息(因为它是对称的,服务器可以使用相同的密钥来解密消息)
  3. 在您的客户端上设置基础架构(例如,称为行为的WCF扩展),以便在消息出来之前检查该消息并使用您的共享密钥对其进行加密
  4. 总而言之,这真的不是微不足道的 - 任何比这更简单的东西都不值得被称为“安全”。

    如果你看一下你将要做的所有工作 - 使用WCF内置证书机制会不会更容易?

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

答案 1 :(得分:3)

嗯,使用WCF,您可以在邮件级别使用密码凭据,在传输级别使用SSL,我认为这样就足够了。

请参阅here

答案 2 :(得分:1)

对于邮件安全性,您的客户端提供一些凭据,服务器提供一些凭据。对于此设置和您的方案,您可以不使用带有Custom Username Validator的客户端用户名和密码,以及提供服务器凭据的服务器证书。这个Application Scenario为您提供了实现此目的所需的配置设置,除了aspNet成员资格部分,您必须用自定义验证配置替换它。

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

答案 3 :(得分:1)

请看下面的示例:

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

它使用证书但没有证书存储 - 因此无需进行任何设置。

答案 4 :(得分:1)

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

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

我希望它有所帮助!

相关问题