设备证书
设备证书
设备证书是由云平台颁发给设备的一组密钥,用于设备连接云平台时的身份认证。根据不同的安全级别需求,ThingsCloud 提供多种设备证书。
普通证书
普通证书包含 ProjectKey
和 AccessToken
,适合用于快速原型开发或普通安全级别的物联网场景。
证书获取方式
对于不同身份验证方式,您可以通过以下方式获取设备证书:
一机一密
这种方式需要在控制台获取设备证书,预先烧录到每个设备固件中。
一型一密
当设备进入产线量产后,不可能为每台设备单独烧录证书。这时需要采用设备动态获取证书的方式,为同一设备类型下的所有设备烧录相同的固件。这种方式称为一型一密。
这种方式下,云平台为设备提供了 证书获取 API,设备开机后调用 API 获取设备证书,然后使用设备证书通过 MQTT 连接云平台。
设备动态获取证书
对于需要量产的设备,通常使用动态获取证书的方式,即实现一型一密。
我们已经知道,设备证书中包含 AccessToken
和 ProjectKey
,其中 AccessToken
在每个设备中是不同的,而 ProjectKey
在每个设备中是相同的。
使用设备动态获取证书的方式,不需要在固件代码中写入设备的 AccessToken
,而是设备每次开机后,使用设备自有的 设备唯一标识(DeviceKey
),通过云平台提供的 动态获取证书 API,获取 AccessToken
,然后通过 MQTT 连接云平台。
提示
设备动态获得 AccessToken
后,不建议保存在设备的 ROM/Flash 中供后续直接使用。因为考虑到安全性,云平台对设备提供重置 AccessToken
的可能性,以降低证书泄露的风险,故确保设备端获取到最新的证书。
设备证书获取 API
HTTP 请求
URL
http://<endpoint>/device/v1/certificate
或
https://<endpoint>/device/v1/certificate
Header:
Name | Value |
---|---|
Project-Key | ProjectKey |
Content-Type | application/json |
以上的 <endpoint>
和 ProjectKey
可以在 设备详情页 > 连接 中找到。
Method:
POST
Body:
HTTP 正文部分使用 JSON
格式,字段如下:
device_key
: 设备唯一标识。由设备端生成,应确保在一个项目中的唯一性。通常使用芯片内置的唯一标识,例如:模组的 IMEI、MAC、UUID 等。
例如:
{
"device_key": "DEVICE_KEY"
}
HTTP 响应
如果证书获取成功,响应消息如下:
{
"result": 1,
"message": "Device found",
"device": {
"id": "DEVICE_ID",
"name": "DEVICE_NAME",
"access_token": "ACCESS_TOKEN"
}
}
如果证书获取失败,响应消息如下:
{
"result": 0,
"message": "..."
}
设备唯一标识
使用动态获取证书的设备,在云平台的设备信息中需要有对应的设备唯一标识,用于云平台识别设备并下发证书。
在使用中,分为以下两种情况:
- 预先创建设备,在设备信息中填写对应的 设备唯一标识,和 证书获取 API 中的
device_key
保持一致。在创建设备或编辑设备信息时,可设置 设备唯一标识,必须在同一个项目的所有设备中保持唯一。
- 不预先创建设备,当设备首次调用 证书获取 API 时,如果
device_key
(设备唯一标识)不存在,云平台会自动创建新设备。这种方式也称为 设备自动注册。
设备自动创建
在实际项目中,当有大量设备接入时,我们可以不用在控制台预先创建每个设备,而是使用设备自动创建功能。
要实现设备自动创建,同样使用上边的设备证书获取 API,在请求正文 JSON 中增加以下字段:
type_key
:设备类型的标识,当使用该字段时,可实现设备首次连接时自动创建新设备,并关联到该设备类型。
例如:
{
"device_key": "DEVICE_KEY",
"type_key": "TYPE_KEY"
}
type_key
的获取方式很简单,进入设备类型的 设置 > 自动创建设备,复制这里的 TypeKey
。如下图:
同时要开启 允许设备自动创建
,这时设备自动注册功能正式启用。
当设备成功注册后,API 返回信息如下:
{
"result": 1,
"message": "Device created",
"device": {
"id": "DEVICE_ID",
"name": "DEVICE_NAME",
"access_token": "ACCESS_TOKEN"
}
}
当使用设备自动注册时,请确保您的项目中有足够的设备数量配额,如果配额达到上限,新设备将无法自动注册。
X.509 证书
在一些对通信安全要求严格的物联网领域,比如智能门锁、电力控制等,您可以使用基于 X.509 TLS 的 MQTT 安全认证方式。
目前 ThingsCloud 在专有区和私有区中支持该认证方式。
安全芯片
不论是哪种设备证书类型,考虑到设备固件代码或云平台用户账号等存在泄露的可能性,导致证书仍然有泄露的风险。
通过 SE 安全芯片可以实现设备端证书的独立加密存储,以及设备和云平台的双向认证,达到最大的安全级别。
ThingsCloud 面向智能设备厂商和安全级别较高的物联网场景,联合加密芯片合作厂商,提供包括加密芯片和证书服务器在内的 SE 整体解决方案。