本方案不在设备上烧录设备证书,而是设备上电联网后,向厂商服务器发起请求,获取设备证书(ProductKey、DeviceName和DeviceSecret)。本文介绍厂商云服务端开发方案。
设备获取设备证书的方案介绍,请参见获取设备证书方案概述。
原理
本方案中,需要部署一个设备证书分发服务器,开发相应的服务端API和设备信息数据库表,用于设备请求获取设备证书。
证书分发服务器收到来自设备的获取证书请求时,调用上述API。该API的业务逻辑为:根据请求中的设备标识查询设备信息数据表,根据查询结果,进行以下后续操作。
- 没有查到传入的设备标识,则返回设备非法错误。 
- 有对应的设备标识,且已有设备证书,则返回设备证书。 
- 有对应的设备标识,但没有设备证书,则调用物联网平台API RegisterDevice注册设备身份,获取证书后,再发送给设备。 
设备获得证书之后,再使用该证书连接阿里云物联网平台。
参与该过程的各个角色的时序图如下所示。

- 设备需要能自动获取IP地址,并连接您的证书分发服务器。 
- 证书分发服务器由您自行设计实现。 
- 您需要确保设备连接到证书分发服务器的安全性和可靠性。 
服务器API设计建议
建议您按以下方法设计该API。
- 请求参数: - 参数 - 说明 - deviceId - 设备在您的系统中的唯一标识。自定义,可以是设备MAC或者SN等。 
- 返回参数: - 参数 - 说明 - productKey - 对应物联网平台颁发的设备证书的ProductKey。 - deviceName - 对应物联网平台颁发的设备证书的DeviceName。 - deviceSecret - 对应物联网平台颁发的设备证书的DeviceSecret。 
设备信息数据表设计建议
建议您按以下方法设计设备信息数据表。
表格属性:
| 表格属性 | 建议取值 | 
| 数据表名称 | device_table | 
| 数据生命周期 | -1 | 
| 最大数据版本 | 1 | 
| 数据有效版本偏差 | 86400 | 
| 主键 | deviceId,字符串(String) ,分区键。 | 
数据字段:
| 字段 | 说明 | 
| deviceId | 设备唯一标识。自定义,可以是设备MAC或者SN等。 | 
| registerTime | 设备注册时间。 | 
| activateTime | 设备激活时间。 | 
| productKey | 对应物联网平台颁发的设备证书的ProductKey。 | 
| deviceName | 对应物联网平台颁发的设备证书的DeviceName。 | 
| deviceSecret | 对应物联网平台颁发的设备证书的DeviceSecret。 | 
| IotId | 物联网平台为该设备颁发的设备ID,该设备在物联网平台上的唯一标识。 |