前言
在物联网这个巨大的世界里,拥有一台物联网服务器是多么美妙啊。正如我们自己制作的衣服更合身一样,我们自己打造的物联网服务也更灵活。
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接收消息在上面,可自由发挥
***********************************************************************/
2022/03/16
当实现 服务端
和 设备
逐渐完善时,又多了一个问题。因为我在服务端做的安全防护比较多。所以在硬件对接服务器时,需要人工配置很多参数。需要配置的参数如下。
MQTT服务器地址
- 为了方便维护,给每台设备分配不同的服务器地址
NTP服务器地址
- NTP服务器大部分情况下都是不会变的,但还是需要分配一下
设备账户
- 给每个设备分配一个账户,设备才能登录
设备ID
- 设备ID是设备接入节点的唯一标识
设备密钥
- 每次建立连接的时候,都需要依赖设备的唯一密钥
设备主题
- 设备主题当前设备独享的,其他设备无权限订阅/发布
当这么多参数需要配置时,就会很繁琐,自从人类会使用工具那一刻起,就因该考虑怎么用工具减少工作.于是我做了一个自动配置如上参数的工具.能够实现对参数的一键配置.按照凡人通俗易懂的理解,可以解释为一键注册.
2022/03/17
当 设备一键注册
完成时,还是感觉不太方便.
于是又开发了个工具(AmCodeBuilder),实现了 代码自动生成
.
2022/03/18
当我实现了代码自动生成后,又多了一个想法.
想把这么方便的东西给更多的人使用,想搭建一个微型网站,起名为 自由物联+
- 用户登录注册(Authing)
- 开源广场
- 设备管理
完善了
arduino
代码的生成- 以前只能生成单页代码,目前能生成完整的arduino项目,并且提供压缩打包下载.