我有一个WCF服务和客户端,将被部署到几家公司(几百个)。 有些公司会在他们的网络上运行的软件,有些人会(在办公另一WCF服务器,WCF客户端)运行在互联网上。
我们要加密的WCF服务器和客户机之间的通信。 我们没有任何需要进行身份验证使用WCF安全cient /用户,因为我们有自己的用户名/密码登录该客户端将用来登录服务器。
- 我们不能依赖于Windows身份验证,因为有些用户会在互联网上运行,而WCF服务器可能无法在同一个域中的WCF客户端。
- 如果我们用“真实”的证书*,运行的软件公司将不得不从CA购买证书并安装它,然后配置我们的软件来使用它,但这是太复杂了其中的大部分。
- 安装WCF服务器的过程中,我们可以自动创建证书,但随后我们将不得不自动将它安装到证书存储并以某种方式自动授予IIS权限读取证书。 这是更复杂的比我们希望的。
总之,我们希望其中加密只是基于一个共享的秘密,在我们的情况下,用户名/密码的用户登录用一个简单的解决方案。 我不明白,这不会给最好的加密,但是我们愿意牺牲一些安全性,使软件更容易部署。
这可能吗?
*使用“真实”的证明,我的意思是从证书颁发机构购买证书,而不是一个我自己创建/自签名。
如果要加密对传输的消息(这是一个很好的主意!),必须有发送者(客户端)和服务器之间的一些共享的知识。 这可以是硬编码的,但是这真的不是一个好主意,在所有 - 如果“共同分享”知识遭到盗用,攻击者可以破译和阅读所有邮件。
此外,由于它绝对不是推荐的做法,也没有任何形式支持的WCF中使用共享的秘密简化。 你对你自己 - 你必须滚动的方式自己100%。
有一种安全的方式交换了一个公共的共享机密的唯一可行的方法是使用证书。 没有办法解决这个,对不起。 证书甚至没有用于用户认证或任何东西 - 但它建立在调用者和服务之间的共享密钥,从而允许呼叫者进行加密以这样的方式只有预期的收件人可以实际解密和使用信息他们。
所以,我真的看不出有什么办法让您可以有你的服务器上安装证书 - 不需要是每个客户端上,但如果你的服务运行在每台服务器上。
渣
PS:如果你真的想查“硬编码共享秘密”的方式,你需要想一想:
- 你怎么在每和您的客户的每一个安全存储共享的秘密?
- 你如何使用从共享存储的秘密信息加密你的消息?
通常情况下,该方法是两方面:
- 交换某种形式的公/私密钥对的; 服务器生成一个密钥对,并保持私钥本身并分享与客户端的公钥(例如,在WCF消息,例如)
- 使用私有/公共密钥对交换的通用共享的秘密,如一个“密钥”,将对称加密邮件(并且由于它是对称的,该服务器可以使用相同的密钥来解密消息)
- 您的客户端上安装基础设施(如一个WCF扩展称为行为 ),它超出前检查邮件,并与您共享密钥进行加密
总而言之,这真的不是小事 - 什么比这更简单的是不值得被称为“安全”可言。
如果你看一下所有的工作,你将不得不这样做 - 那岂不是更容易,只需使用内置的证书机制的WCF?
体面安全称职很难 -那么,为什么不充分利用什么可用的,而不是自己做所有的工作,或者更糟:想出一个半生不熟的解决方案,是很容易破解,你可以很容易地以明文发送的一切...... ..不要低估了处理连最基本的安全方案复杂性和所需的代码量 - WCF做这一切为您 - 免费的,可靠和安全的方式 - 用它! 你会不会后悔!
那么,与WCF你可以在消息级别和使用SSL证书的密码在传输层面,我认为这将足以在你的情况。
见这里 。
对于信息安全,您的客户端提供了一些证书和服务器提供了一些凭证。 对于此设置,并与你的情况你能不能用一个客户端的用户名和密码自定义的用户名验证 ,以及服务器证书提供给服务器的凭据。 这种应用场景提供的配置设置,你需要做到这一点的公平chucnk,除了ASPNET会员节,你将与你的自定义验证的配置来代替。
你仍然需要在服务器上有效证件(没有在客户端所需的证书),但我看不到解决这个办法。
看看下面的示例:
http://www.codeproject.com/KB/WCF/wcfcertificates.aspx
它使用的证书,但没有证书存储 - 因此没有设置是必要的。
嗯..可以用来也许简单的东西。 移动加密从软件到硬件。 VPN从每个客户端网络,以你自己的,然后你可以做任何你喜欢的WCF中进行传输。 该生产线不清晰的文本和问题解决。
当然,这说起来容易做起来难,但大多数网络供应商提供了一个非常简单的VPN配置,它比试图制定SSL证书的安装和配置客户端可能更容易。
我希望它能帮助!