我有一个WCF服务和客户端,这将部署到几个公司(数百)。一些公司将在他们的网络中运行软件,一些公司将在互联网上运行它(WCF服务器在办公室,WCF客户端在另一个)。
我们希望对WCF服务器和客户端之间的通信进行加密。我们不需要使用WCF安全来验证有效/订阅者,因为我们有自己的用户名/密码登录,客户端将使用它来登录服务器。
简而言之,我们想要一个简单的解决方案,其中加密只是基于一个共享的秘密,在我们的例子中,是用户登录时使用的用户名/密码。我确实理解这不会给出最好的可用加密,但我们愿意牺牲一些安全性来使软件更容易部署。
这个是可能的吗?
*对于“真正的”证书,我指的是从证书颁发机构购买的证书,而不是我自己创建/自签名的证书。
发布于 2009-10-15 09:11:11
如果您想加密传输中的消息(这真是一个好主意!),发送者(客户端)和服务器之间必须有一些共享的知识。这可以是硬编码的,但这真的不是一个好主意--如果“公共共享”知识被泄露,攻击者就可以破译和阅读你的所有消息。
此外,由于这绝对是而不是推荐的做法,所以在WCF中没有任何类型的支持来简化共享密钥的使用。你要靠你自己--你必须100%靠自己。
以安全的方式交换公共共享秘密的唯一可行的方法是使用证书。别无他法,抱歉。证书甚至不必用于用户身份验证或任何东西-但它在调用者和服务之间建立了一个共享的秘密,从而允许调用者以只有目标接收者才能实际解密和使用的方式加密消息。
所以我真的看不出有什么方法可以在你的服务器上安装证书--不需要在每个客户端上,而是在你的服务运行的每一个服务器上。
Marc
PS:如果你真的想要研究“硬编码的共享密钥”方法,你需要考虑一下:
通常,这种方法有两个方面:
对其进行加密
总而言之,它真的不是微不足道的--任何比这更简单的东西都不值得被称为“安全性”。
如果您查看所有必须完成工作-只使用WCF内置证书机制不是更容易吗?
正派的安全性值得它的盐是硬的-所以为什么不利用可用的东西,而不是自己做所有的工作,或者更糟:想出一个半生不熟的解决方案,它很容易破解,你可以很容易地以明文发送所有东西.不要低估了处理最基本的安全场景所需的代码的复杂性和数量- WCF为您做了所有这些-免费,以可靠和安全的方式-使用它!你不会后悔的!
发布于 2009-10-15 08:26:43
使用WCF,您可以在消息级别使用密码凭据,在传输级别使用SSL,我认为在您的情况下这就足够了。
参见here。
发布于 2009-10-19 08:47:07
对于消息安全性,您的客户端提供一些凭据,服务器提供一些凭据。对于此设置和您的场景,您可以不使用带有Custom Username Validator的客户端用户名和密码以及服务器证书来提供服务器凭据。此Application Scenario提供了实现此目的所需的配置设置,但aspNet membership部分除外,您必须将其替换为自定义验证配置。
您的服务器上仍然需要有效的证书(客户端上不需要证书),但我看不出有任何方法可以解决这个问题。
https://stackoverflow.com/questions/1570939
复制相似问题