Python 如何保证服务器身份?

Python 如何保证服务器身份?,python,node.js,security,ssl,websocket,Python,Node.js,Security,Ssl,Websocket,消费者端A B C上有3台服务器,其中2台是我们的应用程序B Node.js、C Python。服务器之间的所有通信都由带有TLS的WebSocket处理。C未连接到A。我不希望消费者能够运行假的B或C服务器并将其连接到真正的C或B服务器 A客户 B-服务器为A,单独的服务器为C具有不同的端口 C-客户机 另外还有外部D许可证服务器,可通过互联网访问 那么,保证服务器身份的最佳方法是什么呢?如果这些程序是您的客户在其拥有和托管的计算机上运行的,而客户是您试图防范的攻击者,那么就没有办法做到这一点

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

A客户 B-服务器为A,单独的服务器为C具有不同的端口 C-客户机 另外还有外部D许可证服务器,可通过互联网访问


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

如果这些程序是您的客户在其拥有和托管的计算机上运行的,而客户是您试图防范的攻击者,那么就没有办法做到这一点

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

但是你要把私钥存储在哪里呢?程序可以访问它的地方,也就是说您的客户可以访问它的地方

当然,你可以尝试混淆钥匙。如果没有人关心如何破解你的系统,这个方法非常有效,但是如果没有人关心,你就不必做任何事情。如果破解你的系统对某人来说是有价值的,他们会找到一种方法来找出关键

在这一点上,你正处于一场军备竞赛中:每当有人找到你的钥匙时,你必须想出一种新的方法来混淆它们,让它们重新开始

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

如果你能强迫服务器与你在互联网上运行和控制的另一台服务器通信,你就更难破解握手,也更难坚持使用旧版本,但这几乎是不可能的。实际上,这只是将攻击面转移到修改服务器上,从而使它们不进行上游检查。你在这里所说的基本上等同于Windows激活或在线游戏验证,当然,人们已经破解了

无论如何,在很多情况下,做一些事情是值得的:

通常,少量的混淆是值得的,以阻止偶然的黑客行为。 支付其中一个商业解决方案的费用意味着您现在使用的是行业标准保护,因此您可以使用DMCA对付任何攻击它的人,如果合作伙伴因数据丢失等原因起诉您,您可以为自己辩护。 如果价值20万美元/年的工程设计能够将价值2亿美元/年的内容的损失减少10%,那么就要付出努力。
但在这一点上,我们不是在讨论业务问题,因此您可能会从安全顾问那里得到更好的建议,他们可以向您提出有关业务的正确问题,而不是从编程网站上的一般答案中获得建议。

这就是证书的用途。只要让TLS按照默认方式验证证书,就可以了。除了它们只针对服务器,而不是客户机。你是说B作为客户端连接到C,C能够保证B的身份,而不是B能够保证C的身份?如果是这样的话,你还需要一点。但是可能有一个更简单的解决方案。您的所有服务器都在同一个内部网络上吗?如果是这样,只需在一个单独的端口上执行所有服务器到服务器的操作,在外部路由器上对该端口设置防火墙,只在内部网络上侦听该端口,现在没有人可以冒充B。@abarnert消费者可以关机,例如B,使用相同的端口运行假B,并接收从真实C到假B的连接。您在这里实际要保护什么?我不希望消费者能够运行假B或C服务器。。。为什么不呢?是因为安全问题还是因为许可/支付问题?