19

我在 Beaglebone Black 上有多个微型 Linux嵌入式服务器(可以由 RaspberryPi,它没有区别),需要与主服务器(托管在网络上)交换信息。

理想情况下,每个系统通过简单的 RESTful 命令相互通信——例如,主服务器向嵌入式服务器发送新配置——然后服务器发回数据。人类用户也可以从主服务器或直接向嵌入式服务器发出命令。

每个服务器相互验证的最“标准”方式是什么?我在考虑 OAuth,假设每台机器都有自己的 OAuth 用户 - 但我不确定这是否是正确的模式。

4

2 回答 2

12

每个服务器相互验证的最“标准”方式是什么?我在考虑 OAuth,假设每台机器都有自己的 OAuth 用户 - 但我不确定这是否是正确的模式。

验证机器与验证用户没有什么不同。他们都是安全主体。事实上,微软在 Windows 2000 中使机器成为一等公民。它们可以成为文件和文件夹等安全对象的主体,就像普通用户一样。

(由于服务器通常遭受 Gutmann 在他的工程安全书中描述的无人值守密钥存储问题,因此有些人挥手致意)。

我将使用私有 PKI(即,成为我自己的证书颁发机构)并利用基于公钥/私钥对(如 SSL/TLS)的相互身份验证。这具有重用大量基础架构的额外好处,因此 HTTP/HTTPS/REST 一如既往地“正常工作”。

如果您使用私有 PKI,请为包含以下密钥用法的机器颁发证书:

  • 数字签名(密钥使用)
  • 密钥加密(密钥使用)
  • 密钥协议(密钥使用)
  • Web 客户端身份验证(扩展密钥使用)
  • Web 服务器验证(扩展密钥使用)

或者,运行私有 PKI 并仅允许使用基于您的 PKI 的 VPN 的服务器之间的通信。您仍然可以通过隧道传输您的 RESTful 请求,并且没有其他人能够与您的其中一台服务器建立 VPN。您可以免费获得 IP 过滤器。

或者使用带有密钥分发中心的 Kerberos 样式协议。您将需要整个 Kerberos 基础架构,包括 KDC。根据 KDC 监督的秘密设置安全通道。

或者,使用类似 SSH 的系统、公钥/私钥对和sneaker-net 将对等方的公钥相互复制。仅允许来自您拥有其公钥的机器的连接。

我可能不会使用类似 OAuth 的系统。在类似 OAuth 的系统中,您将同时是提供方和依赖方。在这种情况下,您还不如成为 CA 并重用 SSL/TLS 中的所有内容。

于 2014-02-07T09:10:13.900 回答
2

我认为您需要根据您的要求使用 SSL 在服务器之间实施相互身份验证。
我对 M2M 环境了解不多,但使用 OAuth 对您的服务器进行身份验证是 OverKill。

https://security.stackexchange.com/questions/34897/configure-ssl-mutual-two-way-authentication


此外,在发送命令时加密您的通信通道可以使其更安全地免受攻击

于 2014-02-04T15:40:36.813 回答