我有一个WCF服务和客户端,它将部署到几家公司(数百家)。一些公司将在他们的网络中运行该软件,一些公司将通过互联网运行它(办公室的WCF服务器,另一个的WCF客户端)。
我们希望加密WCF服务器和客户端之间的通信。我们没有必要使用WCF安全性来验证客户/订户,因为我们有自己的用户名/密码登录,客户端将使用这些登录来登录服务器。
简而言之,我们想要一个简单的解决方案,其中加密仅基于共享密钥,在我们的例子中是用户登录的用户名/密码。我知道这不会提供最好的加密,但我们愿意交换一些安全性,以使软件更容易部署。
这可能吗?
*使用“真实”证书,我指的是从证书颁发机构购买的证书,而不是我自己创建/自签名的证书。
答案 0 :(得分:17)
如果你想加密传输上的消息(这是一个非常好的主意!),发送者(客户端)和服务器之间必须有一些共享知识。这可以是硬编码的,但这根本不是一个好主意 - 如果这种“共同共享”知识遭到破坏,攻击者就可以破译并阅读你的所有信息。
此外,由于它肯定是不推荐的做法,因此在WCF中不支持任何类型以简化共享密钥。你是自己的 - 你必须自己完成100%的方式。
以安全的方式交换公共共享密钥的唯一可行的方法是使用证书。没办法,抱歉。证书甚至不必用于用户身份验证或任何东西 - 但它在呼叫者和服务之间建立共享秘密,从而允许呼叫者以这样的方式加密消息,只有预期的接收者才能实际解密和使用他们。
所以我真的没有看到任何方法可以绕过你的服务器上的证书 - 不需要在每个客户端上,而是在你的服务运行的每个服务器上。
马克
PS:如果你真的想调查“硬编码共享秘密”方法,你需要考虑这个问题:通常情况下,方法是双重的:
总而言之,这真的不是微不足道的 - 任何比这更简单的东西都不值得被称为“安全”。
如果你看一下你将要做的所有工作 - 使用WCF内置证书机制会不会更容易?
体面的安全价值 很难 - 所以为什么不利用可用的东西而不是自己完成所有的工作,或者更糟糕的是:提出一个很容易破解的半生不熟的解决方案同样可以轻松地以明文形式发送所有内容.....不要低估处理即使是最基本的安全方案所需的代码的复杂性和数量--WCF会为您免费且以可靠和安全的方式完成所有这些工作 - 用它!你不会后悔!
答案 1 :(得分:3)
嗯,使用WCF,您可以在邮件级别使用密码凭据,在传输级别使用SSL,我认为这样就足够了。
请参阅here。
答案 2 :(得分:1)
对于邮件安全性,您的客户端提供一些凭据,服务器提供一些凭据。对于此设置和您的方案,您可以不使用带有Custom Username Validator的客户端用户名和密码,以及提供服务器凭据的服务器证书。这个Application Scenario为您提供了实现此目的所需的配置设置,除了aspNet成员资格部分,您必须用自定义验证配置替换它。
您的服务器上仍然需要有效的证书(客户端上不需要证书),但我看不到任何解决方法。
答案 3 :(得分:1)
答案 4 :(得分:1)
当然这说起来容易做起来难,但大多数网络供应商提供了一个非常简单的VPN配置,它可能比尝试开发SSL证书的安装程序和配置客户端更容易。
我希望它有所帮助!