设备认证

设备接入物联网平台之前,需通过身份认证。目前,阿里云物联网平台支持使用设备密钥、ID²和X.509证书进行设备身份认证。

设备密钥认证

阿里云物联网平台创建产品时,认证方式选择为设备密钥,然后在该产品下添加设备,获取物联网平台颁发的ProductSecret、DeviceSecret等密钥。设备接入物联网平台时,会使用物联网平台颁发的密钥信息,进行身份认证。

针对不同的使用环境,物联网平台提供以下四种设备密钥认证方案。

  • 一机一密:每台设备烧录自己的设备证书(ProductKey、DeviceName和DeviceSecret)。
  • 一型一密预注册:同一产品下设备烧录相同产品证书(ProductKey和ProductSecret)。开通产品的动态注册功能,设备通过动态注册获取DeviceSecret。
  • 一型一密免预注册:同一产品下设备烧录相同产品证书(ProductKey和ProductSecret)。开通产品的动态注册功能,通过动态注册,设备不获取DeviceSecret,而是获取ClientID与DeviceToken的组合。
  • 子设备动态注册:网关连接上云后,子设备通过动态注册获取DeviceSecret。

一机一密

一机一密认证,是预先为每个设备烧录其唯一的设备证书(ProductKey、DeviceName、DeviceSecret)。当设备与物联网平台建立连接时,物联网平台对其携带的设备证书信息进行认证。认证通过后,设备完成激活,然后与物联网平台进行通信。一机一密认证方式的安全性较高,推荐使用。

认证流程

设备通过 MQTT 和 HTTPS 协议注册认证。这里介绍 MQTT 认证流程。以下是 MQTT 连接的参数。

参数

说明

接入域名

公共实例和企业版实例中,MQTT的接入域名,请参见查看实例终端节点。

可变报头(variable header):Keep Alive

CONNECT指令中需包含Keep Alive(保活时间)。保活心跳时间取值范围为30秒~1200秒,建议取值300秒以上。若网络不稳定,请将心跳时间设置长一些。如果心跳时间不在保活时间内,物联网平台会拒绝连接。更多说明,请参见下文MQTT保活。

MQTT的CONNECT报文参数

一机一密、一型一密预注册认证方式:使用设备证书(ProductKey、DeviceName和DeviceSecret)连接。

mqttClientId: clientId+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|" mqttUsername: deviceName+"&"+productKey mqttPassword: sign_hmac(deviceSecret,content)

  • mqttClientId:格式中| |内为扩展参数。
  • clientId:表示客户端ID,可自定义,长度不可超过64个字符。建议使用设备的MAC地址或SN码,方便您识别区分不同的客户端。
  • securemode:表示目前安全模式,可选值有2(TLS直连模式)和3(TCP直连模式)。
  • signmethod:表示签名算法类型。支持hmacmd5,hmacsha1和hmacsha256,默认为hmacmd5。
  • timestamp:表示当前时间毫秒值,可以不传递。
  • mqttPassword:sign签名需把提交给服务器的参数按字典排序后,根据signmethod加签。签名计算示例,请参见 MQTT连接签名示例。
  • content的值为提交给服务器的参数(productKey、deviceName、timestamp和clientId),按照参数名称首字母字典排序, 然后将参数值依次拼接。

注意 此处productKey和deviceName为必填参数,timestamp和clientId为可选参数。若传入timestamp或clientId,必须与mqttClientId中的设置相同。

示例:假设clientId = 12345,deviceName = device, productKey = pk, timestamp = 789,signmethod=hmacsha1,deviceSecret=secret,那么使用TCP方式提交给MQTT的参数如下:

mqttclientId=12345|securemode=3,signmethod=hmacsha1,timestamp=789| mqttUsername=device&pk mqttPassword=hmacsha1("secret","clientId12345deviceNamedeviceproductKeypktimestamp789").toHexString();

加密后的Password为二进制转16制字符串,示例结果为:

FAFD82A3D602B37FB0FA8B7892F24A477F85****

MQTT签名参数计算方法,请参见如何计算MQTT签名参数。

一型一密免预注册认证方式:使用ProductKey、DeviceName、ClientID、DeviceToken连接。

mqttClientId: clientId+"|securemode=-2,authType=connwl|" mqttUsername: deviceName+"&"+productKey mqttPassword: deviceToken

  • mqttClientId:格式中| |内为扩展参数。
  • clientId、deviceToken:设备动态注册时获得的ClientID、DeviceToken,请参见基于MQTT通道的设备动态注册。
  • securemode:表示目前安全模式,采用一型一密免预注册时,固定取值为-2。
  • authType:表示认证方式,采用一型一密免预注册时,固定取值为connwl。

详细设计

方案设计

采用 EMQX 认证功能实现设备一机一密认证流程。设备使用 mqtt 协议向 emqx-broker 发起连接连接,带上连接参数(mqttClientId、mqttUsername、mqttPassword),emqx 中的 emqx-auth-http 插件负责将请求转发到业务服务的鉴权接口,鉴权接口实现对应的业务处理,返回 emqx-auth-http 处理结果。

实施落地

emqx-auth-http

关于 emqx-auth-http 可以查看 HTTP 认证 | EMQX 4.4 文档 文章介绍,这里不做赘述。

修改 emqx 目录 etc/plugins/emqx_auth_http.conf 中的配置,并在 dashborad 中启动该插件。

# etc/plugins/emqx_auth_http.conf## 这里替换成 http-server提供的认证接口
auth.http.auth_req = http://127.0.0.1:80/mqtt/auth## HTTP 请求方法
## Value: post | get | put
auth.http.auth_req.method = post## 认证请求的 HTTP 请求头部,默认情况下配置 Content-Type 头部。
## Content-Type 头部目前支持以下值:application/x-www-form-urlencoded,application/json
auth.http.auth_req.headers.content-type = application/x-www-form-urlencoded## 请求参数
auth.http.auth_req.params = clientid=%c,username=%u,password=%P

http-service

  1. 业务上设计对应的产品管理功能、设备管理管理,设备属于某个产品。创建设备,将设备的 ProductKey、DeviceName、DeviceSecret 存储到数据库中,并且同步到 redis 中。
  2. /mqtt/auth 接口负责根据入参,从 redis 中获取对应 ProductKey、DeviceName 的设备参数,进行对应的加密,判断是否和 mqttPassword 相同,匹配则放回 200,否则返回非 200。

总结

EMQX 除了提供 http 认证模式之外,还提供了 Mnesia 认证、JWT (opens new window)认证、LDAP 认证等认证方式。之所以选择 http 认证模式,原因如下:

  • 实现相对其他方式来说比较简单;只需要提供 Restful API 即可;
  • 其他的方式涉及到在配置文件中编写 sql,一旦修改需要重启服务;
  • http 认证 只需要入参和出参保持不变即可,业务可做扩展。

EMQX 实现 阿里云一机一密 认证相关推荐

  1. 云堡垒机的作用_阿里云堡垒机详解

    阿里云堡垒机基于协议正向代理实现,对SSH.Windows远程桌面.SFTP等常见运维协议的 数据流进行全程记录,再通过协议数据流重组的方式进行录像回放,达到运维审计的目的. 堡垒机优势 审计合规 满 ...

  2. 阿里云本机一键登录集成

    阿里云一键登录集成 //本机号码一键登录 @weakify(self);//环境检查,异步返回[[TXCommonHandler sharedInstance] checkEnvAvailableWi ...

  3. 阿里云虚机配置免费https证书

    引言 https 可以保护 web 连接不被劫持,保护用户信息:防止页面被植入广告(受够了csdn等的右下角弹窗),提高 SEO 权重. 阿里云虚机提供一个实惠的建站方案,但是并不直接支持 https ...

  4. 阿里云ACP大数据工程师认证,ACP,阿里云ACP认证,阿里云认证,大数据工程师认证

    阿里云ACP大数据工程师认证 先放证书镇楼 ACP认证考试心得 阿里云ACP级专业工程师认证考试不难,只要系统性复习官方文档一次考过其实并不难.大家普遍给出的意见都是要着重复习<阿里云官方文档& ...

  5. 阿里云Apsara Clouder基础技能认证:阿里巴巴编码规范题库(最新题库大全)

    阿里云Apsara Clouder基础技能认证:阿里巴巴编码规范(最新题库大全) 先小试几题(附答案解析) 1. 2. 3. 4.索引 本人刚刚考过,小纪念一下,^-^ 更加详细的题库链接,word文 ...

  6. 伯俊软件获得阿里云原生核心授牌伙伴认证,共建新生态

    疫情冲击加速了行业洗牌,市场格局被重塑,商业模式被重构,数字化转型已然成为全行业的共识. 而云原生则是实现数字化转型的最短路径. 投入20亿 共建新生态 作为诞生于云计算时代的新技术理念,云原生拥有传 ...

  7. android中集成阿里云金融级实人认证

    上个项目中有用到过这个,现在又要用到,每次都是到官网去看文档去集成,特此记录一下集成的步骤 第一步:打开官网文档阿里云金融级实人认证Android接入文档 去下载最新的sdk,集成到项目中 第二步在需 ...

  8. 阿里云Apsara Clouder专项技能认证:实现调用API接口(学习笔记及证书)

    文章目录 课程学习笔记的思维导图 认证证书示意 课程学习笔记的思维导图 (点击可放大查看) 认证证书示意 通过阿里云Apsara Clouder专项技能认证的学习及考试后,会得到一张阿里云给的认证证书 ...

  9. 祸害阿里云宕机 3 小时的 IO HANG 究竟是个什么鬼?!

    作者 | 王知无 责编 | 郭   芮 程序员转行学什么语言? https://edu.csdn.net/topic/ai30?utm_source=csdn_bw 2019年3月3日凌晨,微博炸锅, ...

最新文章

  1. 大龄读博那几年,与君共勉
  2. WPF:Graphics图表--EncodingAndersonDecoding图像编解码(2)
  3. 为了用户体验,不要做浏览器兼容
  4. Nginx安全说:一剑封喉
  5. 为什么PostgreSQL比MongoDB还快之完结篇(深挖单点索引查询)
  6. 图像处理与图像识别笔记(五)图像增强2
  7. Silverlight在IE中无法显示但在Firefox中正常的原因和解决办法
  8. StringBuffer是字符串缓冲区
  9. SDI在自定义的工具栏上添加下拉控件
  10. 3.Linux/Unix 系统编程手册(上) -- 系统编程概念
  11. java案例代码17--正则表达式小案例
  12. MVC学习五:Razor布局页面 _ViewStart.cshtml
  13. vss2005使用手册
  14. 国考银保监会计算机类笔试,银保监会(计算机类)笔试资料(含2018-2019真题).zip...
  15. Android Studio初学者实例:RecyclerView学习--模仿今日头条
  16. 教你如何用Unity和Cardboard把3D游戏做成VR游戏
  17. 赛效:WPS何把文档里竖排的文字变成横排的
  18. 由《成为乔布斯》联想而来
  19. 购物网站被劫持跳转返利推广网站的分析过程和解决方法
  20. matlab初学matlab——变量类型

热门文章

  1. 实现Spring Boot 定时发送带附件邮件功能
  2. Linux环境基础开发工具使用(上)
  3. 浅谈移动开发者的职业规划
  4. 小酷智慧地图3D导览v1.0.73
  5. 多种发动机,的机械原理图 动画图解
  6. PCB layout有DRC为什么还要用CAM和DFM检查?
  7. MacBook 外接鼠标键盘时指针乱窜、不受控制的解决方法
  8. java b kb mb gb 转换_【Java】把字节数B转化为KB、MB、GB的方法
  9. 下载docker-compose太慢解决方式
  10. Nexus 搭建及基础使用