我在WCF安全等方面阅读了很多很多文章...... 但我真的很困惑,保护我的软件的最佳方法是什么。
问题:我的客户端软件[CS]必须调用我的webservice [WS]。 CS在其工作时间内多次调用WS中的函数,因为当用户单击列表上的项目时,用户希望查看存储在我的服务器上并经常更新的一些详细信息。添加到此CS会在运行时向WS发送许多信息以更新某些统计信息(并检查许可证是否正常)。
为什么要实施安全性: - CS将有付费订阅使用它,所以我必须保护盗版。 - WS向CS发送热门信息,其他人无需采取这些信息。 - CS向WS发送了热门信息。 WS存储它,我想避免恶意信息由“中间人”发送
显然我希望发送/接收的每条消息都是UNIQUE,因此没有人可以再向WS发送消息。
请求: - 客户端必须确保WS是官方WS而不是WS的破解代理/仿真 - WS必须知道CS是谁发送消息,因此它可以验证许可证/订阅号码并根据帐户返回结果。
采取的最佳策略是什么?
限制: - 可能最初我买不到有效的SSL证书(但如果有人买我的订阅,我会的) - WS将在共享的Windows托管上(所以我认为没有SSL)
我读过有关传输安全性,消息安全性和混合安全性的内容。但要设置什么属性?什么认证方法使用? “证书x.509”? “安全令牌服务”? “用户名”?
感谢所有人!
更新 谢谢JonoW! 好的,我买得起VPS ......但不是真正的认证证书......我想我不需要真正的证书。 为了验证许可证,我可以让CS发送一个从硬件序列中派生出来的已处理串行...我只需要一个客户端,不要在多台PC上同时使用该软件。 因此,如果某人克隆/窃取其他用户的凭据,我将阻止该帐户,否则我将自动重置用户密码。
问题是避免有人模仿我的WS的“此用户名/密码/序列有一个有效的许可证”消息并从假WS发送它并避免有人向我的WS发送恶意数据冒充另一个客户端...您认为SSL和Verisign证书是唯一的方法吗?为什么“安全令牌服务”或“用户名/密码”不是一个好主意?
答案 0 :(得分:1)
在WCF中使用X.509证书可能会帮助您实现您想要的大部分功能,但这仍然意味着从证书颁发机构购买证书。这也意味着客户需要在他们的最后安装证书,这可能不是一个合理的事情要求他们这样做。
使用SSL意味着您可以信任数据在传输过程中未被篡改,您可以相信来自WS的数据是真实的,但WS将无法保证从CS发送的数据是绝对的从该许可客户端,您将需要一些其他机制。
至于在共享主机上使用SSL,它显然取决于主机,有些可能允许它。也许考虑使用VPS?
<强>更新强>
为什么“安全令牌服务”或 “用户名/密码”不是一个好主意吗?
这两个解决方案都将向WS证明客户端是有效用户,但客户端无法保证WS是真正的WS。即黑客可以更改DNS设置以将用于WS的流量路由到他们自己的服务器,以响应用户/许可证有效,即使不是。这就是SSL的帮助,因为客户端知道SSL证书是真的(这是由.Net完成的),那么如果可以使用SSL证书从WS解密的数据,它必须来自WS,而不是“假的”WS。