MQTT / UDP预滚动:远程配置和数字签名

冬天快结束了,这是一个重新划分界限并讲述MQTT / UDP新功能的时机。

对于初学者,请链接到先前的介绍文章

感谢所有对此感兴趣的人,特别是那些分享想法的人。 您真的用数字签名方法帮助了我。 因此,发生了很大变化的是:

  • 一种灵活的协议扩展机制已经出现:标记的尾巴记录,TTR
  • 在此基础上,制定了数字包裹签名方案
  • 建立了用于组件的远程配置的机制
  • 提出了完整的CI周期:组装,单元测试,端到端协议测试(4 * 4种编程语言)
  • C实现现在支持不同的体系结构,并且可以与不同的OS和监视器集成。
  • 有一些针对Python和Lua的公共软件包,尽管它们已经过时了。

好吧,这里有很多事情:与OpenHAB集成,配置文件和日志记录,与云MQTT服务的兼容性检查,Wemos D1(NodeMCU)的测试用例,atmega128 +以太网(不是arduino)的测试用例,协议连接器示例Java(CCU825),制成了桌面托盘中的通知者控制器示例(最终,我可以通过单击两次鼠标来打开房间的灯:),等等。

现在按顺序。

标记的尾巴记录


作为MQTT软件包的一部分,我变得局促。 我以标签长度内容的形式向其包装中添加了尾部添加剂,现在您可以在其中放入必要的数据了。 今天是包的ID,我们正在响应的包的ID(对于QoS,它仍然有效)和数字签名(如果已启用)。 还计划在值测量时刻和数据包发送时刻的毫秒时间(作为对测量时刻的姑息),以及进一步的任意扩展都可以在UDP数据包的大小范围内。

(未插入SVG, 此处插图

除Lua以外,它已经可以在其他地方使用。 (通常,Lua使我感到失望,只有NodeMCU持有它,然后我将尝试在那里切换到Python)。

数字签名


我很害怕接近这个重量,但是在标签扩展出现之后,一切变得非常简单。 根据HMAC MD5标准对发送的数据包进行签名(对于短UDP数据包,我发现其他时间太长),在输入处进行检查。 是否接受没有签名的程序包由应用程序代码决定。 的确,在Java中有一个“拒绝所有未签名”的开关,但这似乎是极致主义。

远程配置


图片

实际上,一切再次变得简单:存在一个桌面程序(Java,可在任何地方使用),该程序向某个类型的主题( $SYS/conf/# )发出请求(SUBSCRIBE程序包)。 可以远程配置的所有节点都对应于可配置参数的当前值。 程序由此合成了具有名称和输入字段的简单UI,用户更改设置,更新命令后退。 从应用程序代码方面看,库中的整个基础结构只需给出一个参数列表,就能将它们写入/读取到文件或NVRAM中。

C的体系结构和系统相关代码


现在,您可以为体系结构(工具链)添加设置,并为目标OS或监视器添加粘合代码。 这在三种配置上进行了测试-Unix / Cygwin(./configure)、mingw和NUT / OS(无配置)。

好吧,大概就这些了。 没有时间详细说明了,但是如果有兴趣,我会详细介绍。

该项目的文档 ,除抱负之外,仍然非常重要,并且写得很好。 抱歉,缺少俄语,但是这样做的时间很少,我想基于基础架构进行翻译,但是我还没有找到任何可接受的公共服务(在线编辑器)来将段落翻译成段落。

好吧, 仓库本身

Source: https://habr.com/ru/post/zh-CN440438/


All Articles