Mender框架-设备身份验证
Mender-设备身份验证
设备身份验证是Mender框架的部分能力。
认证服务
设备身份认证服务是mender服务器的一部分。
此服务的公共API:
- 设备授权,即授予对特定设备的访问权限
- 颁发和跟踪身份验证令牌(JSON Web Token)
- 检查和管理设备及其身份认证凭据
识别和身份验证
Mender通过一组身份属性(MAC地址,用户定义的UID等)来识别设备;将其视为唯一标识符到多属性结构的扩展(请参阅标识)。
要获取身份验证令牌,设备会发送包含 Identity 属性及其当前公钥的身份验证请求。客户端使用私钥(在设备上保密)对请求进行签名,服务器使用公钥来验证签名。标识属性和公钥的组合形成身份验证集,简称“身份验证集”。
该概念考虑了设备密钥轮换 - 随着时间的推移,单个设备可能会提供不同的密钥,并且跟踪这些密钥并允许用户接受(即授权)或拒绝特定的标识/密钥组合非常重要。Mender 将设备的两个跟踪作为单个真实世界的实体,其中每个设备可能会创建多个身份验证集。请注意,在任何给定时间,最多可以为特定设备接受一个身份验证集。
授权流
mender 提供了三种可能的授权流。其中两个涉及用户明确同意通过 UI 或设备身份验证 API 授权设备,但它们在事件顺序和预期用例方面有所不同。第三个作为企业功能提供,利用PKI(公钥基础结构)根据客户端证书授权设备,而无需显式用户操作。
1. 按需授权
最简单的流程(通常最适合快速原型设计和测试)是手动授权。Mender 服务器记录每个身份验证请求,以供将来审查。只要您(服务器端)认为合适,就可以通过设备身份验证 API(或 UI)接受它。当设备发送另一个身份验证请求时,将导致授权成功。
因此,请求授权流要求用户在设备连接到服务器时逐个接受身份验证集。因此,它不适用于具有许多设备的场景。我们建议将其用于较小或非生产安装。
下面的序列图描述了此流中用户、设备和设备身份验证之间的 API 交互:
- 用户为设备提供一些标识属性和公钥。
- 设备尝试进行身份验证,根据 Mender 客户端配置的间隔在循环中重试。
- 目前,身份验证尝试失败,但 Mender 服务器会记录身份验证集以供将来检查。
- 用户检查挂起的身份验证集。
- 用户接受提交的身份验证集。
- 设备再次申请身份验证令牌。
- 设备身份验证返回有效的身份验证令牌。
![[Pasted image 20220803142256.png]]
2. 预授权
预授权是在设备首次连接到服务器之前对其进行授权。这是一个直观的模型,类似于在登录在线服务之前创建帐户。
它允许您在特定设备离开生产线之前,通过向设备身份验证提供预先分配的身份验证集来对其进行授权。当具有相应身份属性和公钥的设备请求授权时,Mender 服务器将立即对其进行授权,而无需进一步的用户干预。
此流通常更适合生产用例,在该用例中,您计划发布可能大量设备:
- 您可以在 Mender 外部分配和跟踪设备标识属性/密钥。
- 手动或通过脚本,用户使用设备身份验证 API 对设备进行预授权。
- 在发布过程中,将标识和密钥传输到物理设备。
- 在每个设备的第一个身份验证请求时,Mender 服务器对其进行身份验证,并且设备将获得对所有 Mender API 的访问权限。
下面的序列图描述了此流中用户与设备身份验证之间的 API 交互:
- 用户首先将预授权的身份验证集提交到设备身份验证。
- 用户确保物理设备包含相应的标识属性和公钥。
- 当设备激活时,客户端提交包含 Identity 属性和密钥的身份验证请求。
- 设备身份验证服务返回有效的身份验证令牌。

3. 客户端证书和互相 TLS
Mender Enterprise 支持在网络边缘设置反向代理,该代理可以使用 TLS 客户端证书对设备进行身份验证。每个客户端都配备了由 CA 证书(证书颁发机构)签名的证书,边缘代理通过验证此签名来对设备进行身份验证。经过身份验证的设备在 Mender 后端中自动授权,不需要手动批准。
这在批量生产设置中特别有用,因为您可以在制造客户端证书时对其进行签名,以便在客户打开它们时自动被 Mender 服务器接受,这可能在制造几个月后发生。
下面的序列图描述了通过双向 TLS 大使对设备进行身份验证:
- 用户首先使用加密材料预配设备:CA 证书、客户端证书和客户端私钥。
- 设备将授权请求发送到 mTLS 大使,使用客户端 TLS 证书对请求进行身份验证。
- 大使验证设备的证书是否由 CA 证书签名,并将设备预授权给设备身份验证服务。
- 此时,身份验证请求将转发到设备身份验证服务。
- 设备身份验证服务返回有效的身份验证令牌,mTLS 大使将其转发到设备。


浙公网安备 33010602011771号