内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
我有一个WCF服务和客户端,它将被部署到几家公司(数百个)。一些公司将在他们的网络中运行软件,一些公司将通过互联网运行它(WCF服务器在办公室,WCF客户端在另一个)。
我们想要加密WCF服务器和客户端之间的通信。我们不需要使用WCF安全认证cient /订户,因为我们有我们自己的用户名/密码登录,客户将用它登录服务器。
简而言之,我们想要一个简单的解决方案,其中加密仅基于共享密钥,在我们的例子中是用户登录的用户名/密码。我明白,这不会提供最佳的可用加密,但我们愿意交易一些安全性以使软件更易于部署。
这可能吗?
*对于“真实”证书,我是指从证书颁发机构购买的证书,而不是我自己创建/自签名的证书。
如果你想加密传输上的消息(这真是个好主意!),发送者(客户端)和服务器之间必须有一些共享的知识。这可以是硬编码的,但根本不是一个好主意 - 如果这种“共同共享”的知识受到破坏,攻击者就可以破译并阅读你的所有消息。
另外,由于绝对不推荐这种做法,因此WCF不支持任何类型的简化共享机密。你是你自己的 - 你必须自己完成自己的100%。
以安全的方式交换共同秘密的唯一可行方法是使用证书。没有办法解决这个问题,抱歉。证书甚至不必用于用户认证或任何其他用途 - 但它在调用者和服务之间建立共享密钥,并因此允许调用者以这种方式加密消息,只有预期的接收者可以实际解密并使用他们。
所以我真的不认为你可以在服务器上获得证书 - 不需要在每个客户端上,而是在服务运行的每台服务器上。
渣子
PS:如果你真的想调查“硬编码共享秘密”的方法,你需要考虑这一点:
通常情况下,这种方法有两个方面:
总而言之,这不是微不足道的 - 比这更简单的东西根本不值得被称为“安全”。
如果你看看所有这些工作,你将不得不这样做 - 使用WCF内置证书机制不是更容易吗?
体面安全称职是很难-那么,为什么不充分利用什么可用的,而不是自己做所有的工作,或者更糟:想出一个半生不熟的解决方案,是很容易破解,你可以很容易地以明文发送的一切...... ..不要低估即使是最基本的安全方案所需的代码的复杂性和数量 - WCF完成这些工作 - 免费并且以可靠和安全的方式 。