python - 如何保证服务器身份?

标签 python node.js security ssl websocket

<分区>


想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post .

关闭 4 年前

消费者端有 3 台服务器(A <-> B <-> C),其中 2 台是我们的应用程序(B(Node.js),C(Python))。服务器之间的所有通信都由具有 TLS 的 WebSockets 处理。 C 未连接到 A。我不希望消费者能够运行假的 B 或 C 服务器并将其连接到真实的 C 或 B 服务器。

  • A - 客户
  • B - A 的服务器和 C 的不同端口的独立服务器
  • C - 客户

还有外部的D许可证服务器,可以通过互联网访问。

那么保证服务器身份的最佳方式是什么?

最佳答案

如果这些是您的客户在他们拥有和托管的机器上运行的程序,并且客户是您要抵御的攻击者,那么确实没有办法做到这一点。


可以编写一个简单的质询-响应协议(protocol),其中 B 和 C 只需知道彼此的公钥即可验证对方是否知道自己的私钥。 p>

但是您打算将私钥存储在哪里?程序可以访问它的地方——这意味着您的客户可以访问它的地方。


当然你可以尝试混淆 key 。如果没有人关心破解您的系统,这很有效——但是如果没有人关心,您就不必做任何事情。如果破解您的系统对某人有值(value),他们会找到挖掘 key 的方法。

此时您正在进行军备竞赛:每次有人找到您的 key 时,您都必须想出一种新方法来混淆他们,让他们重新开始。

即使这样也行不通,除非您可以要求您的客户在他们的所有服务器上保持最新状态。否则,一旦我从你的 1.3.4 版本中挖出 key ,我就可以继续运行服务器 C 的 1.3.4 版本和我自己的假服务器 B。


如果您可以强制服务器与您在 Internet 上运行和控制的另一台服务器进行通信,则可以使破解握手变得更加困难(并且更难坚持使用旧版本),但这仍然远非不可能.实际上,这只是将攻击面转移到修改服务器上,这样他们就不会进行上游检查。您在这里基本上谈论的是 Windows 激活或在线游戏验证的等价物——当然,人们已经破解了。


有很多情况无论如何都值得做一些事情:

  • 通常,为了阻止偶然的黑客攻击,少量的混淆是值得的。
  • 为其中一种商业解决方案付费意味着您现在正在使用“行业标准”保护,因此您可以使用 DMCA 对付任何攻击它的人,如果合作伙伴因丢失数据等原因起诉您,您可以为自己辩护。
  • 如果每年值(value) 20 万美元的工程设计可以将每年值(value) 2 亿美元的内容的损失减少 10%,请付出努力。

但在这一点上,我们不是在谈论业务问题,因此您可能会从安全顾问那里获得更好的建议,他们可以向您提出有关您的业务的正确问题,而不是从编程站点上的通用答案中获得更好的建议。

关于python - 如何保证服务器身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51912845/

上一篇:node.js - greenlock-express : TypeError: greenlock. app 不是函数

下一篇:python - 使用 ACME 客户端库请求特定挑战

相关文章:

javascript - Node : Passing function specific variables to Async. 并行()

objective-c - 访问 iCloud 钥匙串(keychain)中的所有密码

security - 如何在 Web 根目录之外安全地引用 ASP 经典包含文件?

python - pandas DataFrame 中的 if-else 条件引用两行

python - SciPy 中 10j 的值是多少?

node.js - Meteor 1.3及配置

javascript - Webpack无法在Electron应用程序中从Nodejs打包https

http - Web 安全——如果在域外,HTTP-Location = HTTP-Referrer?为什么?

python - PyQt5:如何在QThread和某些子类之间使用 'communicate'?

python - Pathos.multiprocessing 的池似乎是非本地的?