我正在用微型嵌入式 Linux 盒子创建小型中继站。它们连接了一些传感器,并通过 HTTP POST 将数据传输回服务器。现在服务器只接受他们的消息,以及一个唯一的 ID(eth0 的 MAC 地址)。
我想扩展它以包括某种类型的安全性。我希望能够以最少的配置部署这些小设备。我想将基本固件复制到设备上,在现场将它们连接起来,然后它们会自行注册。他们第一次连接时,我希望服务器和设备进行某种类型的协商,我可以在其中存储指纹。随后的请求我可以使用该指纹验证/验证设备。
这样,一旦设备使用其唯一 ID 进行注册,我就可以确保来自该 ID 的所有数据都来自同一设备。如果一个 rouge 设备或一组设备确实注册了,我将删除它们(我将 IP 存储到,以便我可以按未知范围删除并阻止它们)。
我的问题是这样做的最佳方法是什么?我回想起 SSH 指纹的想法,第一次连接到服务器时,您会获得服务器指纹。如果将来的请求产生了不同的指纹,您会收到一个巨大的警告,并且如果服务器的密钥实际上已经重新生成(例如,您在没有保存旧的 SSH 密钥的情况下进行了重新安装),则必须手动从您的 authorized_keys 文件中删除指纹。
像这样的东西是否可能与 HTTP 一起使用,可能避免使用预共享密钥?
如果重要的话,客户端正在运行 Python2,而它们连接的服务器主要是在 Tomcat 上用 Scala 编写的。