CoAP连接通信(非DTLS加密)

EnOS支持CoAP协议连接通信。CoAP协议适用在资源受限的低功耗设备上,尤其是NB-IoT的设备使用。本文介绍基于CoAP协议、不使用DTLS的接入流程。

基于CoAP的非DTLS加密连接,所使用的CoAP协议标准和限制,与DTLS加密连接相同,参见基于CoAP协议的连接

连接安全

设备需要具备SHA-256算法能力,以生成鉴权时的数字签名。如果需要加密数据,你可以使用二进制解析功能。

基础流程

基于CoAP协议将NB-IoT设备接入EnOS的流程如下图所示:

../../../_images/coap_connection_process_non_dtls.png

基础流程说明如下:

  1. 用户在EnOS创建产品、关联模型,获取产品的认证密钥productKey、productSecret。
  2. 用户应在EnOS注册设备,需要获得设备认证密钥deviceSecret。
  3. 设备开发者在NB-IoT设备上集成认证密钥:productKey、deviceKey和deviceSecret。
  4. 设备上电入网。
  5. 设备向EnOS发送鉴权请求,请求中包含了认证密钥productKey、deviceKey、deviceSecret以及数字签名。
  6. 鉴权通过,设备激活上线。
  7. EnOS发送CoAP协议ACK消息。

开始前准备

  • 逐一注册设备并获取设备的productKeydeviceKeydeviceSecret。有关如何注册设备,参见注册设备
  • 确保设备具有SHA-256加密能力。

连接CoAP服务器

CoAP服务器地址为coap-<hostname>,其中 hostname 是EnOS环境所在的服务器地址,例如EnOS所在环境的服务器地址为abc.def.com,则CoAP的服务器地址为coap-abc.def.com

设备鉴权并连接

  1. 设备发送鉴权请求,其格式为:

    POST /auth/${ProductKey}/${DeviceKey}
    Payload: { "secureMode": ${SecureMode}, "lifetime": ${Lifetime}, "sign": ${sign} }
    

    其中:

    参数 说明
    ProductKey 设备鉴权密钥
    DeviceKey 设备鉴权密钥,建议使用设备的IMEI号作为deviceKey,保证OU下唯一
    SecureMode 认证模式,此种认证方式下为整数2
    Lifetime 用于判断设备的在线状态。如果设备在Lifetime内没有与云端发生消息交互,设备会被判断为离线。Lifetime的单位为秒,允许设置30 - 86400内的一个整数值
    Sign 用于验证设备身份的数字签名

    数字签名按照如下方法生成:

  2. 按照下列格式,拼接请求中的字段: deviceKey${DeviceKey}lifetime${Lifetime}productKey${ProductKey}secureMode${secureMode}

    1. 在该拼接字段结尾附上${DeviceSecret},生成的字段如下: deviceKey${DeviceKey}lifetime${Lifetime}productKey${ProductKey}secureMode${secureMode}${DeviceSecret}
    2. 使用SHA-256算法获得该拼接字段的摘要,并将其中的字母转换为大写。
  3. 鉴权通过,EnOS在鉴权请求的响应中包含CoAP协议定义的返回码。响应的格式如下: .. code-block:: json

    Code: CoAP返回码,参考CoAP协议说明