authentication - 在 M2M 环境中验证 2 台机器的最佳实践

标签 authentication oauth

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

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

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

最佳答案

What would it be the most "standard" way of authentication of each server against each other? I'm thinking OAuth, assuming that each machine has its own OAuth user - but I'm not sure if that is the correct pattern to follow.



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

(由于服务器通常会遇到 Gutmann 在他的 Engineering Security 书中描述的无人值守 key 存储问题,因此有一些问题)。

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

如果您使用私有(private) PKI,请为包含以下 key 用法的机器颁发证书:
  • 数字签名( key 使用)
  • key 加密( key 使用)
  • key 协议(protocol)( key 使用)
  • Web 客户端身份验证(扩展 key 使用)
  • Web 服务器验证(扩展 key 使用)

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

    或者使用带有 key 分发中心的 Kerberos 样式协议(protocol)。您将需要整个 Kerberos 基础架构,包括 KDC。根据 KDC 监督的 secret 设置安全 channel 。

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

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

    关于authentication - 在 M2M 环境中验证 2 台机器的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19208901/

    相关文章:

    html - 在 cookie 中存储 OAuth token 是不好的做法吗?

    python - 无法使用 rauth 库访问 LinkedIn 连接

    java - 在同一个应用程序中实现 Stormpath 表单登录/身份验证以及 REST oAuth 身份验证时遇到问题

    PHP前端和Rest API + OAuth,检测第三方应用程序

    c# - DotNetOpenAuth 与谷歌日历提要

    java - 如何在异构系统中实现SSO(Java和Web应用程序)

    authentication - IIS 匿名用户身份验证不适用于 AD 凭据

    javascript - NestJS-错误 : Unknown authentication strategy "local"

    c# - Web API 和 Angular 5 token 身份验证 - 登录后获取用户信息

    .net - mvc windows 身份验证允许域中的所有用户