标签:http get 传输 sign 流程 运行 忽略 message 处理 上线
架构
数据通道
为设备和物联网应用程序提供发布和接收消息的安全通道。数据通道目前支持CCP协议和MQTT协议。
安全认证&权限策略
为每个设备颁发阿里云IoT的凭证,依赖凭证才能连接阿里云IoT。
设备共享平台
规则引擎
设备快照(待上线)
应用场景
功能
名词解释
概念 |
描述 |
产品 |
同类设备的集合,方便管理设备 |
AppKey |
阿里云IoT为产品颁发的唯一标识 |
AppSecret |
阿里云IoT为产品颁发的产品密钥,和AppKey成对出现 |
设备ID |
对应的英文名称:DeviceId。阿里云IoT为设备颁发的唯一标识 |
设备秘钥 |
对应的英文名称:DeviceSecret。阿里云IoT为设备颁发的设备秘钥,和设备ID成对出现 |
RPC |
设备端向云端发送数据协议,这只适用CCP协议接入的设备 |
RRPC |
由云端发起,但是期望设备端响应的数据交互协议,这只适用CCP协议接入的设备 |
Topic |
用作消息的路由转发,例如设备A将消息发布到Topic:123中,设备B可以订阅Topic:123得到消息。CCP协议和MQT协议都支持 |
发布 |
对应的英文名称:Pub。设备端的发布协议,操作Topic的权限,意思是具有往Topic中发布消息的权限 |
订阅 |
对应的英文名称:Sub。设备端的订阅协议,操作Topic的权限,意思是具有从Topic中订阅消息的权限 |
阿里云物联网套件限制
限制类别 |
描述 |
产品个数 |
目前限制产品个数上限是10个 |
添加设备 |
目前只能在控制台上添加设备,而且单次操作添加不能5万,单个产品不能超过1亿 |
设备数据上报地址 |
目前只能支持本账号下的ECS或SLB的IP地址访问以及ACE的域名访问 |
Topic的长度 |
不能超过128字节 |
CCP协议包大小 |
不能超过256K |
MQTT协议包大小 |
不能超过256K |
设备授权操作 |
不能超过50个 |
授权操作 |
1.单个设备端不能对带有通配符的Topic进行发布或者订阅消息;2.服务端不能对带有通配符的Topic进行发布消息 |
规则引擎 |
同一个账号不超过100个规则 |
规则引擎 |
数据格式必须是JSON才能使用规则引擎 |
规则引擎 |
一条规则中转发数据的操作不能超过10个 |
设备接入云端的协议
全链路加密
整个通信链锯以RSA,AES加密,保证数据传输的安全。
消息实时到达
当设备与阿里云IoT建立数据通道后,阿里云IoT会与设备保持长连接,减少握手时间,保证消息的实时到达。
支持数据透传
设备数据可以基于数据通道以二进制方式透传的方式传到自己的服务器上(只支持在阿里云上购买的产品),阿里云IoT不会保存设备业务数据,从而保证用户对数据的安全可控性。
支持多种通信模式
数据通道支持RPC/RRPC以及Pub/Sub两种通信模式,满足用户不同的应用场景。
设备接入云端的协议 – 基于CCP接入
基于CCP接入云端,主要包含两大流程:
A:设备使用控制台申请的密钥进行签名请求授权,签名使用 hmacmd5算法(可选 hmacsha1),签名内容=devieceid+appkey,使用key=appSecret+deviceSecret
B:服务器验证签名合法,并返回pubkey证书
C:设备生成随机密钥seedkey,使用pubkey RSA加密传输给服务器
D:服务器确认返回令牌 sid ,同时返回签名sign,签名内容=sid,签名的key=appSecret+deviceSecret,同时返回动态负载的接入服务器ip供设备连接
E:客户端使用私钥seedkey解密令牌,进行数据通信,客户端可选协议模式支持ccp\mqtt\coap...
设备接入云端的协议 – 基于MQTT接入
基于MQTT接入云端,主要包含两大流程:
A:设备使用控制台申请的密钥进行签名请求授权,签名使用 hmacmd5算法(可选 hmacsha1、md5),签名内容=devieceid+appkey,使用key=appSecret+deviceSecret
B:服务器验证签名合法,并返回pubkey证书(X.509格式base64)
C:设备使用pubkey证书TLS协议连接MQTT
通信模式
IoT Hub支持两种通信模式:
通信模式 - RPC/Revert-RPC
RPC/Revert-RPC(CCP协议具有的通信模式)
通信模式 - Pub/Sub
Pub/Sub(CCP协议和MQTT都支持)
身份和安全
设备身份
为设备颁发凭证,包括产品证书和设备证书,设备证书与设备是一对一的关系,确保设备的唯一合法性。设备通过CCP协议或者MQTT协议接入数据通道之前,都需要进行设备认证,设备认证需要携带产品证书和设备证书进行认证。
通信安全
采用RSA-512bit、AES算法来保证数据通道的传输安全。
授权
提供设备级的授权粒度。
对于设备端,设备必须具有权限,才可以往某个Topic发布订阅消息,这让用户可以完全控制Topic的消息转发,帮助用户控制数据的安全性;
对于服务端,服务端基于阿里云AK默认具有该账号下Topic的操作权限,但是如果想要操作其他账号下的Topic需要相应的权限。
规则引擎
例子:
SELECT crypto(userId,‘SHA1‘) md2, (a+1) al, color c, config.flag flag, deviceId(),CASE col.a WHEN 1 THEN ‘Y‘ ELSE ‘N‘ END flagFROM"/12345/#"WHEREc is not null and b<0
select参数和where条件可以使用消息的payload属性作为列,不支持子查询。
规则引擎
1 - FROM "topic"
当有符合topic规则的消息到达时,消息的payload数据以json形式被上下文环境使用(如果消息格式不合法,将忽略此消息),您可以使用topic()函数引用具体的topic值。
2- SELECT
select的属性来源于消息的payload,可以使用json表达式形式引用,也可以来源于函数比如deviceId()。
3- WHERE
规则触发条件,条件表达式。当符合topic的消息到达时,这条消息触发规则的条件。
4- json表达式
select和where可以直接使用json表达式。 json表达式支持属性,也支持数组。如果payload数据解析出错将会导致规则运行失败。 转发数据action中的表达式需要使用 ${表达式} 来使用。
平台功能与界面 – 创建产品
平台功能与界面 – 产品信息
平台功能与界面 – 添加设备
平台功能与界面 – 设备信息
平台功能与界面 – 设备授权
平台功能与界面 – 批量下载设备ID
平台功能与界面 – 服务配置
服务配置的所有功能目前只支持CCP协议接入的设备,MQTT协议接入的设备不能使用该功能
平台功能与界面 – Topic管理
CCP协议和MQTT协议都支持Pub/Sub的通信方式,Pub/Sub是基于Topic路由转发消息的。Topic是动态创建的,用户可以通过服务端调用OpenAPI或者设备端调用协议方法往某个Topic中发布消息,云端自动判断该Topic是否存在,不存在即创建。
平台功能与界面 – Topic信息
消息内容将会转换成二进制分发给订阅者。所以如果发布的是JSON格式的消息,订阅者只能拿到转码过后的二进制数据,如果想要拿到JSON数据,需要再进行UTF-8转换成JSON。
阿里云物联网套件OPEN API
阿里云物联网套件Open API分为以下3类:
控制指令接口只适用CCP协议接入的设备;
设备互联接口和授权相关接口适用于CCP或者MQTT协议接入的设备。
阿里云物联网套件OPEN API
调用方式
通过向API的服务端地址发送HTTP GET请求,并按照接口说明在请求中加入相应请求参数来完成的;根据请求的处理情况,系统会返回处理结果。
请求结构
阿里云物联网套件OPEN API
签名机制
IOT服务会对每个访问的请求进行身份验证,所以无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名(Signature)信息。
IOT服务通过使用Access Key ID和Access Key Secret进行对称加密的方法来验证请求的发送者身份。
Access Key ID和Access Key Secret由阿里云官方颁发给访问者(可以通过阿里云官方网站申请和管理),
其中Access Key ID用于标识访问者的身份;Access Key Secret是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密,只有阿里云和用户知道。
物联网IOT服务端SDK
目前仅支持Java SDK和PHP SDK
API列表
API名称 |
说明 |
SubRequest |
[设备互联] 服务端订阅某些Topic(Topic规则) |
PubRequest |
[设备互联] 服务端发布消息到某个Topic |
UnsubRequest |
[设备互联] 服务端取消订阅某个Topic |
RevertRpcRequest |
[控制指令] 推送数据到设备并得到设备的回执消息 |
PushByteMessageRequest |
[控制指令] 推送数据到设备不需要得到设备返回数据 |
物联网IOT服务端SDK示例(以Java为例)
1、引入SDK
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-iot</artifactId> <version>2.0.1</version> </dependency> |
2、初始化
String accessKey = "<your accessKey>"; String accessSecret = "<your accessSecret>"; IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",accessKey, accessSecret); DefaultAcsClient client = new DefaultAcsClient(profile);//初始化SDK客户端 |
3、发起调用(以推送数据到设备为例)
RevertRpcRequest rpcRequest = new RevertRpcRequest(); rpcRequest.setDeviceId("11a936267d2a4b6eb7b4cb8549fc1fa7");//设备接入时候得到ID rpcRequest.setAppKey(appKey);//设备接入时候填写的appKey rpcRequest.setTimeOut(5000); //超时时间,单位毫秒.如果超过这个时间设备没反应则返回"TIMEOUT" rpcRequest.setRpcContent("aGVsbG8gd29ybGQ=");//推送给设备的数据.数据要求二进制数据做一次BASE64编码.(示例里面是"helloworld"编码后的值) RevertRpcResponse rpcResponse = client.getAcsResponse(rpcRequest); System.out.println(rpcResponse.getResponseContent());//得到设备返回的数据信息. System.out.println(rpcResponse.getRpcCode());//对应的响应码( TIMEOUT/SUCCESS/OFFLINE等) |
标签:http get 传输 sign 流程 运行 忽略 message 处理 上线
原文地址:http://www.cnblogs.com/Free-Thinker/p/7297933.html