基本问题
我如何知道发送我的服务消息的是我的可公开访问(客户端)应用程序?我怎么知道冒充我的应用程序的不是其他应用程序?
一些背景
目前我们通过 log4net 和 WCF 将我们网站上发生的所有错误记录到数据库中。这很有效,因为 Web 服务器(可从 Web 访问 - 部分受信任)通过受信任的关系向应用程序服务器上运行的 WCF 服务报告错误(无法从 Web 访问 - 受信任)。因此,我们知道所有错误日志都是真实的,我们需要对其进行调查。
通过我们的新网站,我们计划利用 SilverLight 让事情变得活跃一点。我们面临的问题是如何将错误从运行在 Web 消费者 PC(不受信任)上的 SilverLight 应用程序报告回我们的应用程序服务器(无法从 Web 访问 - 受信任)。
我们可以通过让客户端通过 Web 服务器上的服务门面进行通信来解决应用服务器的不可访问问题,这样就不用担心了。当我们需要确保发送消息的应用程序确实是我们的应用程序而不仅仅是一个模仿者时,就会出现问题。
一些想法
代码将用C#编写并在客户端 PC 上本地运行的SilverLight应用程序中运行,因此我们不能保证它不会被反编译并用于向我们的服务发送虚假消息。
以上意味着我们不能使用传统的对称加密,因为我们不能将我们的私钥存储在应用程序中(它可以被反编译)。同样,我们不能使用非对称加密,因为它可能只是被冒充(攻击者可以使用存储的公钥签署消息并发送它们 - 消息看起来是真实的)
在这个应用程序的情况下,没有用户身份验证,所以我们不能用它来为我们提供信任。
是的,我知道这很奇怪,因为错误日志比应用程序显示的数据受到更好的保护,但事实就是这样 :)
任何想法或帮助将不胜感激!