我正在开发一种产品,它需要充当本地网络上的服务器,供其他客户端应用程序连接,但要满足以下限制:
- 交换的数据非常宝贵,我们无法保证用户网络或作为服务器的机器的安全。因此,任何 SSL 证书都可能落入“坏人之手”。
- 为尽量减少对用户体验的干扰,任何向客户端识别服务器的非电子方式都应仅限于可以写在便利贴上的信息(即 IP 地址、密码而不是交换 key 文件)。
鉴于这些,我们当前的 SSL 策略是:
- 不要将任何 SSL 证书安装到任何受信任的商店或根据 CA 证书签署任何证书 - 这可能会给潜在的攻击者提供所有客户端计算机的前门 key
- 因此,SSL 证书将是自签名的。这不会提供中间人保护,因为我们无法验证服务器。但是,它确实为网络不安全但服务器安全的用户提供窃听保护。
- 使用 Rijndael 对称加密在顶部实现“密码”系统,因此即使证书被泄露,也有一些窃听保护(我知道,有很多漏桶 - 但总比没有好).此密码可以定期重新生成,而不会对客户的用户体验造成干扰。
在这些限制下,是否有更安全的客户端和服务器通信策略?
最佳答案
最后,我们开发了一个系统,我们可以在内存中为我们要支持的每个 channel 生成一个新的 SSL 证书。这不能提供针对中间人的保护,但至少可以防止窃听(除非第三方在传输时可以访问服务器的内存,在这种情况下所有安全性都没有实际意义!)。
关于不可信服务器的SSL证书策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5755157/