7.5.2 CMS ID 组件
2026/7/18大约 4 分钟常用组件组件CMS安全认证IoT
7.5.2 CMS ID 组件
📚 本节导读
学习时长:约 20 分钟
难度级别:⭐⭐⭐☆☆
前置知识:设备认证概念、加密基础、第 7.5.1 节 CMS Connect
🎯 学习目标
- 理解 CMS ID 组件的身份认证机制
- 掌握一机一密、一型一密、X.509 证书三种认证方式
- 掌握动态注册流程
- 了解 CMS 平台与 OneNET 平台的关系
- 掌握 CMS 组件的 Kconfig 配置方法
一、CMS ID 组件
1.1 概述
CMS ID 是设备身份认证与密钥管理组件,负责设备身份标识的生成、存储、验证和安全管理。它确保只有合法设备才能接入 CMS 平台,保护设备和数据安全。
1.2 核心功能
| 功能 | 描述 |
|---|---|
| 设备身份注册 | 向 CMS 平台注册设备,获取设备唯一标识 |
| 密钥管理 | 安全存储和管理设备密钥(DeviceSecret) |
| 身份认证 | 设备连接时进行身份验证,支持一机一密和一型一密 |
| 证书管理 | 支持 X.509 证书认证方式 |
| 安全存储 | 将密钥等敏感信息存储在安全区域(如加密 Flash) |
1.3 认证方式
| 认证方式 | 描述 | 适用场景 |
|---|---|---|
| 一机一密 | 每个设备有独立的 DeviceSecret | 安全性要求高,设备量适中 |
| 一型一密 | 同一产品型号的设备共享 ProductSecret,动态注册获取 DeviceSecret | 设备量大的批量生产场景 |
| X.509 证书 | 使用数字证书进行双向认证 | 最高安全级别,金融/工业场景 |
1.4 核心数据结构
/* 设备身份信息 */
typedef struct {
char product_key[PRODUCT_KEY_MAX + 1]; /* 产品标识 */
char device_name[DEVICE_NAME_MAX + 1]; /* 设备名称 */
char device_secret[DEVICE_SECRET_MAX + 1]; /* 设备密钥 */
char device_id[DEVICE_ID_MAX + 1]; /* 设备唯一 ID */
int auth_type; /* 认证类型 */
} cms_id_info_t;
/* 动态注册信息 */
typedef struct {
char product_key[PRODUCT_KEY_MAX + 1];
char product_secret[PRODUCT_SECRET_MAX + 1];
char device_name[DEVICE_NAME_MAX + 1];
} cms_dynamic_register_t;1.5 核心 API
/* 初始化 CMS ID 组件 */
int cms_id_init(void);
/* 设置设备身份信息 */
int cms_id_set_device_info(cms_id_info_t *info);
/* 获取设备身份信息 */
int cms_id_get_device_info(cms_id_info_t *info);
/* 一机一密认证 */
int cms_id_auth_by_device_secret(cms_id_info_t *info);
/* 一型一密动态注册 */
int cms_id_dynamic_register(cms_dynamic_register_t *reg_info);
/* 保存设备密钥到安全存储 */
int cms_id_save_secret(const char *secret);
/* 读取设备密钥 */
int cms_id_load_secret(char *secret, int max_len);
/* 生成设备签名 */
int cms_id_generate_sign(const char *payload, char *sign, int sign_len);1.6 使用示例
#include <cms_id.h>
/* 一机一密认证示例 */
void cms_id_auth_example(void)
{
cms_id_info_t dev_info = {
.product_key = "a1b2c3d4e5",
.device_name = "device_001",
.device_secret = "your_device_secret_here",
.auth_type = CMS_AUTH_TYPE_DEVICE_SECRET,
};
/* 初始化并设置设备信息 */
cms_id_init();
cms_id_set_device_info(&dev_info);
/* 执行认证 */
int ret = cms_id_auth_by_device_secret(&dev_info);
if (ret == 0) {
os_kprintf("Device authentication success!\r\n");
} else {
os_kprintf("Device authentication failed: %d\r\n", ret);
}
}
/* 一型一密动态注册示例 */
void cms_id_dynamic_register_example(void)
{
cms_dynamic_register_t reg_info = {
.product_key = "a1b2c3d4e5",
.product_secret = "your_product_secret_here",
.device_name = "device_002",
};
cms_id_init();
/* 动态注册 */
int ret = cms_id_dynamic_register(®_info);
if (ret == 0) {
os_kprintf("Device registered successfully!\r\n");
/* 读取注册后获取的设备信息 */
cms_id_info_t dev_info;
cms_id_get_device_info(&dev_info);
os_kprintf("Device Secret: %s\r\n", dev_info.device_secret);
}
}二、CMS 与 OneNET 的关系
| 特性 | CMS 平台 | OneNET 平台 |
|---|---|---|
| 定位 | 物联网设备管理平台 | 物联网接入平台 |
| 协议 | MQTT 为主 | 多种协议(MQTT/CoAP/HTTP/LwM2M) |
| 设备管理 | 设备注册、影子、OTA | 设备注册、数据流 |
| 认证方式 | 一机一密/一型一密/证书 | 产品 ID + 鉴权信息 |
| 与 OneOS 集成 | CMS Connect + CMS ID 组件 | Molink OneNET NB 组件 |
两者互为补充,CMS 侧重于设备管理,OneNET 侧重于数据接入。在 OneOS 中,CMS 组件通过 CMS Connect 管理设备生命周期,而 OneNET 组件用于通过蜂窝模组直接接入 OneNET 平台。
三、Kconfig 配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
OS_USING_CMS | bool | n | 启用 CMS 平台组件 |
CMS_USING_CONNECT | bool | y | 启用 CMS Connect 连接组件 |
CMS_USING_ID | bool | y | 启用 CMS ID 身份认证组件 |
CMS_USING_OTA | bool | n | 启用 OTA 固件升级 |
CMS_USING_LOG_REPORT | bool | n | 启用日志上报 |
CMS_USING_DYNAMIC_REGISTER | bool | n | 启用一型一密动态注册 |
CMS_AUTH_TYPE | choice | 一机一密 | 认证方式选择 |
📝 本节小结
本节介绍了 OneOS CMS ID 组件及 CMS 平台的整体配置。CMS ID 负责设备身份认证,支持一机一密、一型一密和 X.509 证书三种认证方式,保障设备安全接入 CMS 平台。
核心要点回顾:
- CMS ID 提供设备身份认证与密钥管理功能
- 一机一密:每个设备独立密钥,安全性高
- 一型一密:动态注册获取密钥,适合批量生产
- X.509 证书:最高安全级别,适用于金融/工业场景
- CMS 与 OneNET 互为补充:CMS 侧重设备管理,OneNET 侧重数据接入