前言
在庞大的物联网世界中,自己拥有一台物联网服务器时多么一件美好的事。如同自己做的衣服更合身,自己搭建的物联网服务更灵活。
2022/3/9搭建服务
首次搭建了服务,但是感觉在安全方面是个很大的问题。每个设备都能连接,每个设备都能随便发布,订阅主题。跟公有MQTT服务器区别不大。
2022/3/10增加认证
每台设备通过预先分配好的 (账户名+密码+设备ID)
进行登录,如果恶意制造相同 (账户名+密码+设备ID)
的设备。在设备有重连机制的情况下,两台设备会不断地把对方踢下线。导致通信不稳定。当然,这是我在测试中故意造成的后果,现实中很少见。设备登录安全 往后需要进一步提升。
当所有设备拥有独立的账号密码之后,会考虑到设备 通信独立性。给每台设备分配该设备可以订阅和发布的主题。每个设备之间的订阅和发布都是独立的,A设备
不能订阅 B设备
的主题,B设备
不能订阅 A设备
的主题,发布也如同。后面我可能会增加全局主题,局部主题。
2022/3/11增加令牌认证机制
单纯的 (账户名+密码+设备ID)
认证,会存在很大的安全隐患。在MQTT认证时如果没有开启 TLS/SSL
双向认证机制的时,可以对报文进行 抓包
,会导致设备密码泄露。为了解决这个问题,打算把 web安全
当中 令牌认证机制
搬过来。所以我对原有的设备认证机制做了很大的改动,为了能够在MQTT当中使用令牌认证机制。
当我在做压测时发现服务器负载比往常高,这是令牌认证机制导致的,令牌认证机制虽好,但会降低认证效率。为了解决这个问题,后面增加了 令牌桶
。增加 令牌桶
使得认证效率提高。且更灵活的管理 令牌
的失效时间。
2022/3/13客户端调试
我的 客户端
用的是 Esp8266
,Esp8266
在每次认证时都从 腾讯NTP服务器
获取当前时间,md5(token+ts)
生成令牌,提交认证。
但遇到一个问题,几次认证失败后,导致Esp8266内存不够,重启,结果如图所示。
2022/03/15 客户端调试
增加debug调试模式
增加一站式配置参数
特色:一行代码启动所有业务
void setup()
{application_initialize(); /* 应用程序初始化 */
}
特色:已封装函数块,无需关心底层业务逻辑
/**********************************************************************
MQTT接收消息在下面,可自由发挥
***********************************************************************/
//当MQTT收到消息
void mqtt_client_recived(){Serial.println(mqtt_client_recived_data);
}
/**********************************************************************
MQTT接收消息在上面,可自由发挥
***********************************************************************/
[scode type=“blue”]原创文章,转载注明出处[/scode]
2022/03/16
当实现 服务端
和 设备
逐渐完善时,又多了一个问题。因为我在服务端做的安全防护比较多。所以在硬件对接服务器时,需要人工配置很多参数。需要配置的参数如下。
- MQTT服务器地址
- 为了方便维护,给每台设备分配不同的服务器地址
- NTP服务器地址
- NTP服务器大部分情况下都是不会变的,但还是需要分配一下
- 设备账户
- 给每个设备分配一个账户,设备才能登录
- 设备ID
- 设备ID是设备接入节点的唯一标识
- 设备密钥
- 每次建立连接的时候,都需要依赖设备的唯一密钥
- 设备主题
- 设备主题当前设备独享的,其他设备无权限订阅/发布
当这么多参数需要配置时,就会很繁琐,自从人类会使用工具那一刻起,就因该考虑怎么用工具减少工作.于是我做了一个自动配置如上参数的工具.能够实现对参数的一键配置.按照凡人通俗易懂的理解,可以解释为一键注册.
2022/03/17
当 设备一键注册
完成时,还是感觉不太方便.
于是又开发了个工具(AmCodeBuilder),实现了 代码自动生成
.
2022/03/18
当我实现了代码自动生成后,又多了一个想法.
想把这么方便的东西给更多的人使用,想搭建一个微型网站,起名为 自由物联+
- 用户登录注册(Authing)
- 开源广场
- 设备管理
- 完善了
arduino
代码的生成- 以前只能生成单页代码,目前能生成完整的arduino项目,并且提供压缩打包下载.