全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
阿里云物联网套件

设备认证及使用准备

更新时间:2018-04-02 21:05:04

设备身份

物联网套件为设备颁发证书,包括产品证书和设备证书,设备证书与设备是一对一的关系,确保设备的唯一合法性。设备通过CoAP、HTTPS、或者MQTT协议接入IoT Hub之前,都需要进行设备身份认证,设备根据不同的接入认证方案,上报对应的产品证书(ProductKey)和设备证书(DeviceName 和 DeviceSecret),云端认证通过后才可允许设备接入。

设备认证

物联网套件针对不同安全等级和产线烧录要求,为开发者提供了多种设备认证方案:

一机一密

物联网套件默认采用一机一密,即设备需要预先烧录唯一的设备证书,设备与云端建连时携带ProductKey、DeviceName和DeviceSecret进行接入认证,认证通过后云端完成设备激活并进行数据的上下行。

使用流程:

image

说明:

  1. 在物联网套件控制台创建一款产品,获得系统颁发的ProductKey
  2. 进入设备管理页面,选择为该产品添加一个设备,获得设备的DevicenameDeviceSecret
  3. 产品上为每个设备烧录ProductKey、DeviceName和DeviceSecret;
  4. 设备上电联网,向云端发起认证;
  5. 云端认证设备,通过后与设备建立连接,设备激活并订阅相关Topic,开始数据的上下行通信;

一型一密

同一产品下的所有设备可以烧录相同的产品证书(ProductKeyProductSecret),设备请求接入时,云端动态下发该设备的DeviceSecret,然后使用ProductKey、DeviceName和DeviceSecret进行认证并建立连接。

该方案的优势在于相同产品的设备可以烧录相同固件,激活时从云端动态获取DeviceSecret,极大简化产线烧录流程。

使用流程:

一型一密使用流程

说明:

  1. 在物联网套件控制台创建一款产品,获得系统颁发的ProductKeyProductSecret
  2. 进入产品详情页面,开启动态注册开关,为确保是您本人操作,系统将发送短信验证码到您绑定的手机,请填写正确的验证码,确认开启;

    请注意:设备采用“一型一密”动态获取设备证书时,系统将校验是否已开启此开关,如未开启将拒绝新设备的动态激活请求,但已激活的设备不受影响,如果您发现产品证书发生了泄漏,出于安全考虑您也可以选择暂时关闭“动态注册”开关。

  3. 进入设备管理页面,选择为该产品添加一个设备,您可以选择将设备的MAC地址、IMEI或SN号等ID信息作为DeviceName预注册到平台,此时设备处于“未激活”状态;

    建议您采用可以直接从设备中读取到的ID作为DeviceName进行预注册,在设备激活时,将校验DeviceName是否已经在云端预注册,否则将拒绝下发DeviceSecret。

  4. 产线为该产品下的所有设备烧录相同的ProductKeyProductSecret,设备端SDK(C-SDK)设置FEATURE_SUPPORT_PRODUCT_SECRET = y开启一型一密功能;

  5. 设备上电联网,首先通过一型一密发起认证请求,云端校验通过后动态下发该设备对应的DeviceSecret

    请注意,设备使用“一型一密”认证时,仅在首次激活时动态下发DeviceSecret,如果该设备已激活,云端将拒绝重复激活,如确需重新激活设备,您可以选择删除设备并重新添加,此时设备可以请求新的DeviceSecret进行认证接入。

  6. 设备获得了连接云端所需的全部证书信息,使用ProductKeyDeviceNameDeviceSecret向云端发起连接,后续的设备上线同“一机一密”认证;

子设备动态注册

设备通过网关进行代理接入时,可以借助于设备间的拓扑关系,由网关向云端动态申请子设备的设备证书,子设备复用网关的消息通道进行激活和数据的上下行,前提是网关作为一个普通的直连设备需首先完成自身的认证和激活。

详细流程请参考文档子设备接入

如何选择认证方案

上述方案,在易用性和安全性上各有优势,开发者可以根据设备所需的安全等级和实际的产线条件灵活选择,方案对比如下:

对比项 一机一密 一型一密 子设备注册
设备端烧录信息 ProductKey、DeviceName、DeviceSecret ProductKey、ProductSecret ProductKey
云端是否需要开启 无需开启,默认支持 需打开动态注册开关 无需开启,默认支持
是否需要预注册DeviceName 需要,确保产品下DeviceName唯一 需要,确保产品下DeviceName唯一 云端匹配DeviceName则下发设备证书,不匹配则创建DeviceName并下发设备证书
产线烧录要求 逐一烧录设备证书,需确保设备证书的安全性 批量烧录相同的产品证书,需确保产品证书的安全存储 子设备批量烧录相同的产品证书,但需要确保网关的安全性
安全性 较高 一般 一般
是否有配额限制 有,单个产品50万上限 有,单个产品50万上限 有,单个产品50万上限
其他外部依赖 依赖网关的安全性保障

SDK使用准备

登录IoT控制台获得相关配置信息。

  • 创建产品得到产品证书,包括productKey(产品key)productSecret(产品密钥)

    使用“一型一密”认证时,productSecret(产品密钥)必选;

产品证书

  • 选择设备管理,在产品下添加设备得到deviceName(设备名称)deviceSecret(设备密钥)
    • 使用“一机一密”认证时,deviceSecret(设备密钥)必选;
    • 使用“一型一密”认证时,deviceSecret(设备密钥)由云端动态下发;

设备证书

设备证书-2

  • 使用“一型一密”认证,需在控制台开启“动态注册”开关,进入产品详情页面,将“动态注册”置为打开,需填写短信验证码进行确认开启;

动态注册开关

  • 得到设备的Topic

    • 基础版Topic基础版Topic

    • 高级版Topic高级版Topic

  • 一型一密C-SDK设置

如果使用C版SDK,请设置FEATURE_SUPPORT_PRODUCT_SECRET = y,并使用正确的设备(支持一型一密的设备),就可以支持一型一密功能。具体实现可以参考/src/cmp/iotx_cmp_api.c中IOT_CMP_Init的实现。

  1. #ifdef SUPPORT_PRODUCT_SECRET
  2. /* 一型一密 */
  3. if (IOTX_CMP_DEVICE_SECRET_PRODUCT == pparam->secret_type && 0 >= HAL_GetDeviceSecret(device_secret)) {
  4. HAL_GetProductSecret(product_secret);
  5. if (strlen(product_secret) == 0) {
  6. CMP_ERR(cmp_log_error_secret_1);
  7. return FAIL_RETURN;
  8. }
  9. /* auth */
  10. if (FAIL_RETURN == iotx_cmp_auth(product_key, device_name, device_id)) {
  11. CMP_ERR(cmp_log_error_auth);
  12. return FAIL_RETURN;
  13. }
  14. }
  15. #endif /**< SUPPORT_PRODUCT_SECRET*/
本文导读目录