繁体   English   中英

如何验证我在Python应用程序中控制的服务器的身份?

[英]How can I verify the identity of a server I control in a Python application?

我的应用程序自动从中央服务器下载更新。 我有点担心有人,例如,劫持我的域名并将其指向提供了应用程序颠覆副本的自己的服务器。

在我看来,对称密钥是解决此问题的方法。 我想我可以将公钥正确编码到程序的源中,并将私钥保留在我的服务器上,然后在协议中添加一个步骤,客户端发送一条消息,表示“您是授权服务器”,然后服务器发回一条用私钥编码的意思是“我肯定是”的消息,然后用公钥对其进行解码,以验证该消息来自我的服务器。 然后,我们照常进行。

假设这不是处理事情的完全愚蠢的方法,我该怎么做? 存在哪些轻量级库可以使用RSA密钥进行编码/解码? 我不认为我想使用SSL的完整TLS; 我不在乎谁会读取更新,而且无论如何我都负担不起解密的开销-下载时间很烦人!

该过程需要像这样工作...

服务器端:

  • 在服务器上构建消息数据
  • 使用类似SHA256的哈希值
  • 使用私钥对哈希签名
  • 将签名和数据发送给客户端

客户端:

  • 接收数据和签名
  • 独立计算数据的哈希
  • 使用公共密钥来验证我们生成的哈希与服务器签名的哈希匹配。

如果是这样,我们知道数据已由服务器发送并且未修改。 我们不会阻止其他任何人看到数据,而只是篡改数据。

这样做的原因是非对称加密非常昂贵(随着消息大小的增加,它很快变得更加昂贵)。 通过简单地对哈希签名,我们限制了需要加密处理的数据量,同时仍确保消息未修改。

请注意,这是一个非常高级的概述,并且有很多细节需要正确处理。 任何与加密有关的事情都很难正确完成。 如果可能,请找到已经执行此操作的库,然后改用该库。

如果找不到适合您需要的内容,请查看pycryptorsa并阅读。 这个问题可能是一个很好的起点,但是请确保您阅读了两个答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM