0

我有一个客户端-服务器-应用程序,它允许用户通过网络在服务器上运行任何代码。我想保护用户不连接到其他服务器,它的行为就像真实的东西,但是窃取了密码,我该怎么做?不能期望服务器和客户端都可以访问互联网,证书颁发机构是不可能的。有没有其他方法可以验证我正在与之交谈的代码,即使有人获得了源代码?

4

2 回答 2

0

您的攻击者是否可能获得对您真实服务器的 root 访问权限?如果没有,那么您可以建立一个自签名证书(如 CodesInChaos 建议的那样)并依靠操作系统权限来防止未经授权的用户读取私钥文件。然后,您可以确信您的客户端仅连接到您的真实服务器(通过 SSL)。

如果攻击者可以获得对您真实服务器的 root 访问权限,那么您将面临许多问题。首先,攻击者可以随意读取进程内存,因此暴露在服务器内存中的任何敏感资料(例如您提到的密码)都可以访问。此外,攻击者可以窃取您的私钥并建立他们自己的服务器(尽管他们为什么会这样做,因为他们可以简单地窥探您的真实服务器内存)。

于 2012-09-02T09:56:29.727 回答
0

最简单的解决方案是使用带有自签名证书的 SSL。然后将服务器的证书硬编码到客户端。大多数 SSL 库都提供了一些方法来滚动您自己的证书验证逻辑,或更改有效 CA 的集合。

这假设您可以将服务器的证书保密。


原则上, SRP可以作为替代方案。但是你不应该自己实现它,因为很容易犯一些看似有效的细微错误,但却使系统不安全。一些 SSL 库,例如 GnuTLS 支持 SRP。

于 2012-08-02T09:13:44.903 回答