是否可以仅从已知客户端强制执行Web服务调用?

时间:2009-08-21 20:30:01

标签: c# .net web-services security encryption-asymmetric

情景:

我完全可以控制的公共Web服务。 但我只希望这个特定的桌面应用程序(我发布的应用程序)能够访问Web服务。 我可以在桌面客户端中存储一个密码,但这很容易破解。

是否有任何已知的实施可以强制执行此操作? PKI,非对称密钥?

3 个答案:

答案 0 :(得分:3)

如果公众可以访问此桌面应用程序的副本,任何好的反向者都可以破解它并“模仿”与服务器的交易。无论您的加密技术有多安全,您应用加密/解密数据所需的一切都包含在二进制文件中,因此破解者只需要将其挖掘出来。

密码学的目的是保护数据在传输过程中受到“中间人”黑客的攻击,但如果您可以访问任何同行,则可以轻松破解它。

您的服务器绝不能相信来自客户端的内容。

[编辑恢复]

尽管您不能100%保证服务器的假定客户端是或者不是您的应用程序或由第三方制造的某些“模拟器”,但您可以使事情复杂化。它是游戏反作弊的常见做法,有时,随机,使客户端应用程序成为一个技巧问题,如“你的main.exe从偏移A到偏移B的哈希?”或者“从现在开始,数据包类型为0x07,交换数据包类型为0x5f”。一旦检测到假冒,服务器进入“愚蠢模式”,行为失灵,并将他们的IP /帐户黑名单到这个模式几个小时,这样他们就无法确定他们的程序出错了。

如果您发现某人正在构建模拟器,请让它们重新开始:混淆数据包类型表,加密表,更改某些数据包格式并强制您的客户端进行更新。你不会看到一段时间困扰你的饼干...... LOL

答案 1 :(得分:1)

WS-Security提供X509加密。

该实现的一部分包括仅向特定客户端提供生成的公钥的可能性。这样,只有您选择的客户端才能连接到该服务。

答案 2 :(得分:0)

最简单的方法是使用客户端和服务器证书的邮件安全性。最好的方法是在服务器计算机中导入客户端证书,并在app.config文件中对客户端证书指纹进行硬编码。另一种方式是谈判证书,我以前没有尝试过。

如果您使用IIS来托管服务,则使用SSL的客户端证书是另一种选择。

WCF Security上的MSDN链接。