设备安全方案¶
为保证连接的安全,设备接入 EnOS 之前,需要经过鉴权认证。EnOS 支持以下认证模式:
基于密钥的单向认证
基于证书的双向认证
认证流程概览¶
无论采用何种认证方式,设备认证过程如下:
智能设备认证¶
登陆 EnOS 管理控制台,为需要接入的设备创建模型、产品、注册设备。
在设备上配置认证需要的信息。
启动设备,使用配置的认证信息尝试连接 EnOS。
如果设备通过认证,则其会成功连接至 EnOS,否则连接会失败。
非智能设备认证¶
登陆 EnOS 管理控制台,为需要接入的设备及其代理网关设备创建模型、产品、注册设备。
在网关设备上,配置需要接入的设备的认证信息。
启动网关设备,使用配置好的认证信息尝试连接 EnOS。
如果设备通过认证,则其会成功连接至 EnOS,否则连接会失败。
基于密钥的单向认证¶
基于密钥的单向认证机制使用以下密钥:
产品密钥:Product key 和 product secret。
Product key:是 EnOS 为产品颁发的唯一标识。可以在 设备管理 > 产品管理 > 产品详情 处获得。
Product secret:EnOS 颁发的产品密钥,与 Product key 成对出现。对于采用动态激活的设备,设备初次连接 EnOS 时,发送携带 product key、product secret 和 device key 的请求,可从 EnOS 获取 device secret 以激活设备。可以在 设备管理 > 产品管理 > 产品详情 处获得。
设备密钥:Device key 和 device secret。
Device key:在注册设备时,用户自定义或系统自动生成的设备标识,OU 内唯一。可以在 设备环境 > 设备资产 > 设备详情 处获得。
Device secret:EnOS 颁发的设备密钥,和 device key 成对出现。可以在 设备环境 > 设备资产 > 设备详情 处获得。
基于密钥的单向认证机制为 EnOS 默认的认证方式。更具体而言,默认认证方式是单向认证机制中的静态认证。
认证流程¶
设备通过认证、与 EnOS 连接,有以下步骤:
设备认证模式和设备状态¶
在 EnOS 云平台初次注册的设备是默认处于 未激活 状态,等待被认证。设备认证方式有以下几种:
动态认证
静态认证
动态认证¶
要启用动态认证,需要在 设备管理 > 产品管理 中,选择需要使用动态激活的产品,点击其 查看 图标,进入产品详情页。在 产品信息 标签页,打开 动态激活 开关。
动态认证过程如下:
已注册但未激活的设备发送一个携带 product key, product secret, device key 的请求以尝试认证,认证通过以后,EnOS 返回 device secret 给设备,用于后续的通信。此时设备状态由 未激活 变为 在线 。如果一段时间内设备未上送数据,则状态由 在线 变为 离线 。
只要设备状态为 未激活 ,使用 product key, product secret, device key 可以反复获取 device secret。
如果设备 在线 或 离线 的设备,但需要重新认证该设备的,首先在 设备资产 中删除设备实例,再重新创建设备实例,然后让设备使用新的 product key, product secret, device key 来获取 device secret。
首次认证成功后,设备之后的认证是使用 product key,device key,device secret。
静态认证¶
EnOS 默认的设备认证方式。其认证过程如下:
设备向 EnOS 发送携带有 product key,device key,device secret 的认证请求。这三个参数在用户创建完设备实例之后即可在 EnOS 管理控制台 上 设备管理 > 设备资产 > 设备详情 页获得。用户需要在设备端配置好这三个参数。
设备认证成功以后,设备状态从 未激活 变成 在线 状态。此时设备可以上送数据,如果一段时间内不上送数据,设备状态变成 离线 。
备注
对于认证成功的设备,如果发现设备异常,或者你不希望接收该设备的数据,可以在 设备管理 > 设备资产 页面中通过其 启用/禁用 将其开关禁用。此时设备将自动下线,处于 已禁用 状态。
基于证书的双向认证¶
基于密钥的单向认证是使用设备三元组进行设备身份认证,是一种单向的认证机制,即 IoT Hub 校验设备是否可信。但设备并不校验对端接受数据的 IoT Hub 是否可信。EnOS 也支持 基于证书的双向认证 机制。
要启用基于证书的双向认证,你需要登陆 EnOS 管理控制台 ,选择 设备管理 > 产品管理 > 产品详情 ,在 产品信息 中,将 证书双向认证 设置为 启用。
启用后,EnOS 会强制执行以下安全方案用以保护设备、网关和 EnOS IoT Hub 之间的连接:
直连设备与 IoT Hub 之间、网关设备与 IoT Hub 之间的通信强制使用基于证书的双向认证。
支持使用 RSA 或 ECC 算法验证签名。
相关概念¶
证书颁发机构:数字证书发行机构,能够颁发 CA 证书。
CA 证书:是一种数字证书,该证书的持有者可对其他证书进行签名。它符合 IETF RFC 5280 标准定义的证书格式。
设备证书:由 CA 证书持有者签发的证书。设备证书的生成流程如下:
证书申请方基于设备信息产生一对密钥。
证书申请方基于密钥对产生证书请求文件 CSR。
证书申请方将 CSR 文件发送给 CA 证书持有者。
CA 证书持有者签发并注册设备证书。
EnOS 提供 CA 证书服务的更多内容,参考 X.509 证书服务。
最佳实践¶
如果开启基于证书的双向认证方式,我们推荐以下最佳实践:
建议为每个设备提供一个唯一的证书,以便进行精细的管理,如证书撤销。
设备必须支持更换证书,以确保证书过期时仍能顺畅运行。
设置证书 ¶
下图为基于 X.509 证书的 EnOS Edge 和 IoT Hub 之间的安全通信过程。你也可以使用 EnOS Edge 以外的网关设备。
IoT Hub 获取 X.509 证书¶
1a. IoT Hub 在本地创建密钥对和证书请求文件(CSR 文件),使用 X.509 证书服务的 API 申请包含 CSR 的 X.509 证书。
1b. EnOS CA 颁发 X.509 证书并将证书发送至 IoT Hub。
1c. IoT Hub 接收并存储 X.509 证书。
EnOS Edge 获取 X.509 证书¶
2a. EnOS Edge 设备出厂预烧录了产品密钥(Product key,product secret)和 EnOS Edge 设备序列号(SN)。EnOS Edge 上电联网以后,上报产品密钥以及序列号至云端以动态激活。如果云端鉴权认证通过,会返回 device secret 至 EnOS Edge。
2b. 在 IoT Hub 上,使用 EnOS Edge 的设备序列号作为其 device key 注册 EnOS Edge 设备,可以在 EnOS 管理控制台 注册设备,也可以通过调用 REST API 接口注册设备。
2c. EnOS Edge 接收由 IoT Hub 返回的信息,创建密钥对和 CSR 文件,调用 API 获取它的 X.509 证书。同时使用设备三元组尝试登录云端。
2d. IoT Hub 接收到从 EnOS Edge 发来的 CSR 文件,在验证完身份后,将 CSR 文件转发至 EnOS CA。
2e. EnOS CA 接收到 CSR 文件,颁发 EnOS Edge 证书并发送至 IoT Hub。
2f. IoT Hub 接收到已签发的 X.509 证书,把证书与 EnOS Edge 的设备 ID 绑定,然后将 EnOS Edge 证书发送至 EnOS Edge。
2g. EnOS Edge 接收到 EnOS Edge 证书,需要保存到安全的本地库中。例如,保存至可信平台模块(TPM)。
建立通信 ¶
下图为进行基于证书建立通信的过程:
3a. EnOS Edge 认证 IoT Hub 端的证书。
3b. IoT Hub 认证 EnOS Edge 端的证书。
当步骤 1 和 2 步骤中的 TLS 握手都成功后,EnOS Edge 与 IoT Hub 之间的 TLS 连接即建立完成。
3c. 在 TLS 通道中,EnOS Edge 以 MQTT 协议传送设备遥测信息。
3d. 在 TLS 通道中,IoT Hub 以 MQTT 协议传送配置和控制信号。
撤销证书 ¶
在某些情况下,用户需要撤销 EnOS Edge 的 X.509 证书。
4a. IoT Hub 调用撤销 API 向 EnOS CA 请求撤销 EnOS Edge 端的带序列号的 X.509 证书。
4b. EnOS CA 接收到来自 IoT Hub 的请求后,验证身份,撤销 EnOS Edge 证书,以及升级 CRL。
EnOS Edge 安全的最佳实践 ¶
在基于证书的安全连接中,参考以下最佳实践来确保 EnOS Edge 的安全:
为 EnOS Edge 创建私钥,并将私钥存放至一个安全的库。例如:TPM。
在与 IoT Hub 通信时使用 TLS 1.2 协议,并验证服务器证书的有效性。
每个 EnOS Edge 都必须拥有唯一的公钥和私钥对。
由 IoT Hub 认证的密钥不能用于其他目的或通过其他协议进行通信。
当 EnOS Edge 被重置时,密钥必须被撤回。
当你的 EnOS Edge 在操作系统上运行时,确保你的操作系统上有安全机制。例如,防火墙。
确保你有方法来升级根 CA 根证书与 CRL。
确保 EnOS Edge 上的时钟不被篡改。