我有一个Client-Server-Application,它允许用户通过网络在服务器上运行任何代码。我想保护用户不要连接到其他服务器,其行为类似于真实的东西,但窃取密码,我该怎么办呢? 服务器和客户端都不能指望访问Internet,证书颁发机构是不可能的。有没有其他方法来验证这是我正在谈论的代码,即使有人获取源代码?
答案 0 :(得分:0)
最简单的解决方案是将SSL与自签名证书一起使用。然后将服务器的证书硬编码到客户端。大多数SSL库提供了一些方法来推出自己的证书验证逻辑,或者更改有效CA的集合。
这假设您可以保密服务器的证书。
原则上SRP可以是另一种选择。但是你不应该自己实现它,因为很容易发现似乎有效的细微错误,但会使系统不安全。某些SSL库(如GnuTLS)支持SRP。
答案 1 :(得分:0)
您的攻击者是否可能获得对您真实服务器的root访问权限?如果没有,那么您可以建立自签名证书(如CodesInChaos所建议)并依赖操作系统权限来防止未经授权的用户读取私钥文件。然后,您可以确信您的客户端仅连接到您的真实服务器(通过SSL)。
如果攻击者可以获得对您的真实服务器的root访问权限,则需要处理许多问题。首先,攻击者可以随意读取进程内存,因此可以访问服务器内存中暴露的任何敏感材料(例如您提到的密码)。此外,攻击者可以窃取您的私钥并建立自己的服务器(尽管他们为什么会在他们真正的服务器内存上窥探时)。