阿里云物联网平台设备接入认证方式

阿里云物联网平台设备接入认证方式

设备接入 - 设备安全认证 - 概述

认证方式可选:

  • 设备密钥(常用)
  • ID2
  • X.509

设备密钥认证

阿里云物联网平台为创建的产品颁布了产品码(ProductKey)和产品密钥(ProductSecret),创建的设备颁布了设备名(DeviceName)和设备密钥(DeviceSecret)。设备通过这个四元组认证接入阿里云平台,根据认证方式的不同,只需使用这个四元组中的一部分。

认证方式有一机一密一型一密预注册一型一密免预注册子设备动态注册。他们之间的区别如下述表格:

对比项 一机一密 一型一密预注册 一型一密免预注册 子设备动态注册
设备端烧录信息 ProductKey、DeviceName、DeviceSecret ProductKey、ProductSecret ProductKey、ProductSecret ProductKey
云端是否需要开启动态注册 无需开启,默认支持。 需打开动态注册开关。 需打开动态注册开关。 需打开动态注册开关。
是否需要提前在物联网平台创建设备,注册DeviceName 需要,产品下DeviceName唯一。 需要,产品下DeviceName唯一。 不需要。 需要,确保产品下DeviceName唯一。
产线烧录要求 逐一烧录设备证书,需确保设备证书的安全性。 批量烧录相同的产品证书,需确保产品证书的安全存储。 批量烧录相同的产品证书,需确保产品证书的安全存储。 网关可以本地获取子设备ProductKey。将子设备ProductKey烧录在网关上。
安全性 较高 一般 一般 一般
是否有配额限制 有,单个产品50万上限。 有,单个产品50万上限。 有,单个产品50万上限。 有,单个网关最多可注册1500个子设备。
其他外部依赖 依赖网关的安全性保障。

设备密钥认证实战

一机一密认证实战

开发环境

  • 64位 ubuntu 服务器
  • python3.6
  • paho mqtt 1.4.0
  • aliyun iot linkkit 1.1.0 (Python)

此处选用的是阿里云 Python 版本的 SDK ,方便我们快速验证功能,环境搭建参考Python SDK - 开发环境设备

获取 example 示例代码,并放至环境搭建的工作目录。

例程演示

例程里 mqtt_connect_TCP.py 演示了 Python SDK 使用一机一密接入阿里云物联网平台的方式,先把例程跑起来,然后再分析其具体的使用方式。

首先在云端创建产品和设备,我这里为测试LED灯产品和test1设备,获取该设备的设备证书 ProductKey, DeviceName 和 DeviceSecret 。

mqtt_connect_TCP.py 例程里将设备证书填写到相应代码处,其中 host_name 为物联网平台的 Region ID,可在地域和可用区这里找到,我这里为华东 2,查表为 cn-shanghai 。

然后在之前创建的 Python 虚拟环境中运行该程序,

可以在云端看见 test1 设备已经激活并且在线。

例程分析

该 python 例程挺简单的,首先得到了 linkkit 的一个对象,其创建对象的参数就是我们设备的设备证书和 Region ID 。

lk = linkkit.LinkKit(
    host_name="cn-shanghai",
    product_key="xxxxxxx",
    device_name="test1",
    device_secret="xxxxxxxxxxxxxxxxxxxxxxxxxxxx")

之后注册了一系列的回调函数,能根据名称很明显地看出回调的时机。

lk.on_connect = on_connect
lk.on_disconnect = on_disconnect
lk.on_topic_message = on_topic_message
lk.on_subscribe_topic = on_subscribe_topic
lk.on_unsubscribe_topic = on_unsubscribe_topic
lk.on_publish_topic = on_publish_topic

然后配置了 matt 连接的安全模式,就开始建立连接了。

lk.config_mqtt(secure="")
lk.connect_async()

一型一密预注册实战

开发环境

  • 64位 ubuntu 服务器
  • python3.6
  • paho mqtt 1.4.0
  • aliyun iot linkkit 1.1.0 (Python)

此处选用的是阿里云 Python 版本的 SDK ,方便我们快速验证功能,环境搭建参考Python SDK - 开发环境设备

获取 example 示例代码,并放至环境搭建的工作目录。

例程演示

例程里 dynamic_register.py 演示了 Python SDK 使用一型一密(预注册)接入阿里云物联网平台的方式,先把例程跑起来,然后再分析其具体的使用方式。

首先在云端创建产品和设备,我这里为测试LED灯产品和test2设备。

使用一型一密进行动态注册,需要在云端开启动态注册功能,如下图:

然后将该设备的 product_key, product_secret 和 device_name 写入代码中,注意 device_secret 需保持空。其中 host_name 为物联网平台的 Region ID,可在地域和可用区这里找到,我这里为华东 2,查表为 cn-shanghai 。

然后在之前创建的 Python 虚拟环境中运行该程序,可以发现连接已经建立,

并且在云端可以看见 test2 设备已经激活并且在线。

例程分析

首先也是得到 linkkit 的一个对象,参数为一型一密预注册设备的认证数据,

lk = linkkit.LinkKit(
    host_name="cn-shanghai",
    product_key="xxxxxxxxx",
    device_name="test2",
    device_secret="",
    product_secret="xxxxxxxxxxxxxxxxxxxxxxxx")

然后也是注册了一系列的回调函数,

lk.on_device_dynamic_register = on_device_dynamic_register
lk.on_connect = on_connect
lk.on_disconnect = on_disconnect
lk.on_topic_message = on_topic_message
lk.on_subscribe_topic = on_subscribe_topic
lk.on_unsubscribe_topic = on_unsubscribe_topic
lk.on_publish_topic = on_publish_topic

这里注意下 on_device_dynamic_register 回调函数,设备动态注册成功后 SDK 会回调该函数,

def on_device_dynamic_register(rc, value, userdata):
    if rc == 0:
        print("dynamic register device success, rc:%d, value:%s" % (rc, value))
    else:
        print("dynamic register device fail,rc:%d, value:%s" % (rc, value))

这里的 rc 为动态注册的结果,0 为成功,非 0 为失败。

rc 为 0,则 value 值为成功注册得到的 DeviceSecret,若 rc 为非 0,则 value 值为错误原因,均为字符串。

云平台只会提供一次 DeviceSecret,再次动态注册该设备时就会得到失败的结果,因此需要在本地持久化该 DeviceSecret ,例程里面并没有做持久化的工作,因此再次运行该例程会得到失败的结果,如下图:

最后直接建立连接:

lk.connect_async()

一型一密免预注册

TODO

一型一密免预注册认证必须使用 TLS 加密,否则不能使用。

建议采用设备的MAC地址、IMEI、SN码等作为 DeviceName 进行动态注册,避免 DeviceName 在云端冲突。

子设备动态注册

TODO

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容