MQTT的一些敏感特性及安全性

上篇的疑问:怎么只对一台设备进行指令下发呢?专门搞个主题??不实际啊

去看了下公司的IOT平台,及咨询了下开发,其实就上篇提到的代理服务器的转发策略,发送的消息带上设备id,根据设备id转发消息,这样可以达到针对性的下发指令。

再思考:高危风险在哪里?

1、代理服务器主要可以管设备、认证鉴权、执行下发等,一些大的层面的管控,这里其实跟web后端的类似的

2、指令的执行业务要看客户端的实现,这个前面也提到了,难点可能也是在这里了,客户端程序现在都是实现SDK,再或者就是agent,跟常规app安全一样了,客户端代码安全、对输入的处理等

3、一般都是连接代理服务器,这种架构解耦了客户端,那可以直连客户端吗?这样我是不是可以直接下发指令呢??那不行的,监听端口都没,连个寂寞

Topic

通配符

单级 +:相当于模糊匹配,仅匹配单级,仅用于主题订阅,不能用于发送消息,myhome/groundfloor/+/temperature

多级 #:多级模糊,直接#可订阅所有主题topic := "topic/#"

以$开头的主题

$:以 $ 符号开头的主题有不同的用途,如topic := "topic/$SYS/broker/clients/total

内置主题有哪些??

持久连接

客户端与代理服务器的持久连接,注意到一个特性就是如果客户端与代理服务器的连接中断了,那此前订阅的主题都会丢失,需要下次连接时重新订阅,

为了解决这个问题

客户端可以在连接到代理时请求一个持久会话。持久会话将所有与客户端相关的信息保存在代理上。客户端在与代理建立连接时提供的clientId标识会话

所以clientId相当于Web的会话cookie了

那如果我知道了这个clientId???嘿嘿嘿~

安全性

1、broker连接dos(长连接,只有发起断开才会断开连接)

2、账号密码明文传输(可以使用证书客户端认证,或是TLS加密传输通道)

3、连接无认证,topic无鉴权

4、订阅所有主题,窃取消息数据

5、clientId枚举,即会话劫持

这是根据MQTT特性整理出来的

参考资料:

基础知识

安全性

持久连接