保护.net Webservice的软件源和更新的最佳方法是什么

保护.net Webservice的软件源和更新的最佳方法是什么,.net,wcf,web-services,security,wcf-client,.net,Wcf,Web Services,Security,Wcf Client,我读了很多很多关于WCF安全性的文章。。。 但是我真的很困惑什么是保护我的软件的最好方法 问题:我的客户端软件[CS]必须调用我的Web服务[WS]。 CS在其工作时间内多次调用WS中的函数,因为当用户单击列表中的项目时,用户希望看到存储在我的服务器上并经常更新的一些详细信息。在运行时向CS添加许多信息以更新某些统计信息(并检查许可证是否正常) 为什么要实施安全性: -CS将有一个付费订阅使用它,所以我必须防止盗版。 -WS向CS发送其他人不必获取的热门信息。 -CS向WS发送了热信息。WS-s

我读了很多很多关于WCF安全性的文章。。。 但是我真的很困惑什么是保护我的软件的最好方法

问题:我的客户端软件[CS]必须调用我的Web服务[WS]。 CS在其工作时间内多次调用WS中的函数,因为当用户单击列表中的项目时,用户希望看到存储在我的服务器上并经常更新的一些详细信息。在运行时向CS添加许多信息以更新某些统计信息(并检查许可证是否正常)

为什么要实施安全性: -CS将有一个付费订阅使用它,所以我必须防止盗版。 -WS向CS发送其他人不必获取的热门信息。 -CS向WS发送了热信息。WS-store和我希望避免恶意信息由“中间人”发送

显然,我希望发送/接收的每一条消息都是唯一的,这样就没有人可以再次向WS发送消息

请求: -客户端必须确保WS是官方WS,而不是WS的破解代理/模拟 -WS必须知道发送消息的CS是谁,这样它才能验证许可证/订阅号,并根据帐户返回结果

最好的策略是什么

限制: -最初我可能无法购买有效的SSL证书(但如果有人购买我的订阅,我会购买) -WS将位于共享的windows主机上(因此我认为没有SSL)

我读过关于传输安全、消息安全以及它们的混合。但是设置什么属性呢?使用什么身份验证方法?“x.509证书”?“安全令牌服务”?“用户名”

谢谢大家

更新: 谢谢你,乔诺! 好的,我能负担得起VPS。。。但不是真正的认证证书。。。我想我不需要真正的证书。 要验证许可证,我可以让CS发送一个从硬件序列派生的已处理序列。。。我只需要一个客户端,不要在多台电脑上同时使用该软件。 因此,如果有人克隆/窃取了另一个用户的凭据,我将阻止该帐户或自动重置用户密码


问题是要避免有人模仿我的WS的“this username/password/serial have a valid license”消息并从假WS发送,避免有人冒充另一个客户端向我的WS发送恶意数据。。。你认为SSL和Verisign证书是唯一的方法吗?为什么“安全令牌服务”或“用户名/密码”不是一个好主意?

在WCF中使用X.509证书可能会帮助您实现您想要的大部分功能,但这仍然意味着从证书颁发机构购买证书。这也意味着客户端需要在其端安装证书,这可能不是要求他们做的合理的事情

使用SSL意味着您可以相信数据在传输过程中没有被篡改,并且您可以相信来自WS的数据是真实的,但是WS无法保证从CS发送的数据肯定来自该许可客户端,您将需要一些其他机制来实现这一点

至于在共享主机上使用SSL,这显然取决于主机,有些主机可能允许使用SSL。也许考虑使用VPS?

更新

为什么是“安全令牌服务”或 “用户名/密码”不是个好主意


这两种解决方案都将向WS证明客户端是有效用户,但客户端不能保证WS是真正的WS。也就是说,黑客可以更改DNS设置,将用于WS的流量路由到他们自己的服务器,以响应用户/许可证是有效的,即使它不是有效的。这就是SSL的帮助所在,因为客户端知道SSL证书是真实的(这是由.Net为您完成的),那么如果可以使用SSL证书从WS解密的数据必须来自WS,而不是“假”WS

将X.509证书与WCF一起使用可能会帮助您实现您想要的大部分功能,但这仍然意味着从证书颁发机构购买证书。这也意味着客户端需要在其端安装证书,这可能不是要求他们做的合理的事情

使用SSL意味着您可以相信数据在传输过程中没有被篡改,并且您可以相信来自WS的数据是真实的,但是WS无法保证从CS发送的数据肯定来自该许可客户端,您将需要一些其他机制来实现这一点

至于在共享主机上使用SSL,这显然取决于主机,有些主机可能允许使用SSL。也许考虑使用VPS?

更新

为什么是“安全令牌服务”或 “用户名/密码”不是个好主意

这两种解决方案都将向WS证明客户端是有效用户,但客户端不能保证WS是真正的WS。也就是说,黑客可以更改DNS设置,将用于WS的流量路由到他们自己的服务器,以响应用户/许可证是有效的,即使它不是有效的。这就是SSL的帮助所在,因为客户端知道SSL证书是真实的(这是由.Net为您完成的),那么如果可以使用SSL证书从WS解密的数据必须来自WS,而不是“假”WS