2012-08-02 100 views
0

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

回答

0

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

这假定您可以保留服务器的证书的秘密。


原则上SRP可能是一种替代方案。但是你不应该自己实现它,因为很容易发生似乎可以工作的细微错误,但是会使系统不安全。一些SSL库(如GnuTLS)支持SRP。

+0

确定什么是保护服务器证书的方式?任何人都可能购买一台服务器并拥有管理员和硬件访问权。 – 2012-08-02 09:32:00

0

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

如果攻击者可以获得对真实服务器的root访问权限,则需要处理很多问题。首先,攻击者可以随意读取进程内存,因此任何暴露在服务器内存中的敏感资料(例如您提到的密码)都可以访问。此外,攻击者可以窃取您的私钥并建立自己的服务器(但是,为什么他们只能窥探真实的服务器内存)。