<分区>
消费者端有 3 台服务器(A <-> B <-> C),其中 2 台是我们的应用程序(B(Node.js),C(Python))。服务器之间的所有通信都由具有 TLS 的 WebSockets 处理。 C 未连接到 A。我不希望消费者能够运行假的 B 或 C 服务器并将其连接到真实的 C 或 B 服务器。
还有外部的D许可证服务器,可以通过互联网访问。
那么保证服务器身份的最佳方式是什么?
最佳答案
如果这些是您的客户在他们拥有和托管的机器上运行的程序,并且客户是您要抵御的攻击者,那么确实没有办法做到这一点。
您可以编写一个简单的质询-响应协议(protocol),其中 B 和 C 只需知道彼此的公钥即可验证对方是否知道自己的私钥。 p>
但是您打算将私钥存储在哪里?程序可以访问它的地方——这意味着您的客户可以访问它的地方。
当然你可以尝试混淆 key 。如果没有人关心破解您的系统,这很有效——但是如果没有人关心,您就不必做任何事情。如果破解您的系统对某人有值(value),他们会找到挖掘 key 的方法。
此时您正在进行军备竞赛:每次有人找到您的 key 时,您都必须想出一种新方法来混淆他们,让他们重新开始。
即使这样也行不通,除非您可以要求您的客户在他们的所有服务器上保持最新状态。否则,一旦我从你的 1.3.4 版本中挖出 key ,我就可以继续运行服务器 C 的 1.3.4 版本和我自己的假服务器 B。
如果您可以强制服务器与您在 Internet 上运行和控制的另一台服务器进行通信,则可以使破解握手变得更加困难(并且更难坚持使用旧版本),但这仍然远非不可能.实际上,这只是将攻击面转移到修改服务器上,这样他们就不会进行上游检查。您在这里基本上谈论的是 Windows 激活或在线游戏验证的等价物——当然,人们已经破解了。
有很多情况无论如何都值得做一些事情:
但在这一点上,我们不是在谈论业务问题,因此您可能会从安全顾问那里获得更好的建议,他们可以向您提出有关您的业务的正确问题,而不是从编程站点上的通用答案中获得更好的建议。
关于python - 如何保证服务器身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51912845/
相关文章:
javascript - Node : Passing function specific variables to Async. 并行()
objective-c - 访问 iCloud 钥匙串(keychain)中的所有密码
security - 如何在 Web 根目录之外安全地引用 ASP 经典包含文件?
python - pandas DataFrame 中的 if-else 条件引用两行
javascript - Webpack无法在Electron应用程序中从Nodejs打包https
http - Web 安全——如果在域外,HTTP-Location = HTTP-Referrer?为什么?