优秀不够,你是否无可替代

知识从未如此性感。 烂程序员关心的是代码,好程序员关心的是数据结构和它们之间的关系 --QQ群: 607064330 --本人QQ:946029359 --淘宝 https://shop411638453.taobao.com/

导航

统计

31-STM32+W5500+AIR202/302基本控制篇-功能优化-W5500移植mbedtls库以SSL方式连接MQTT服务器(单向忽略认证)

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/STM32W5500AIR202A/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

 

说明

在网络通信中,如果不加上SSL,那么信息就以明文的方式暴露在网络通信中

这节移植mbedtls库,让W5500以SSL方式连接MQTT服务器.

 

测试

1.打开本节代码

 

 

2.默认连接本人的服务器测试(服务器端口为8883)

 

 

 

 

 

3.下载到单片机(接上网线)

 

 

 

4.观察日志打印口,确定连接了服务器

 

 

 

 

5.打开MQTT调试助手和开发板通信(注意修改主题)

 

 

 

 

 

 

 

程序说明

本想用网络监控助手监控下,但是因为W5500通信不涉及到电脑

所以我不知道如何用电脑上面的 Wireshark 软件监控监控数据!!!

但是呢此程序我使用了WiFi模块测试了,确实加密了!

 

1.软件选择的C99模式(否则编译报错)

 

 

 

 

2.先说几个自己需要实现的函数(时间函数)

 

 

 

3.随机数函数

 

 

4.网络接收处理函数

SSL的底层获取数据的方式是指明需要多少个数据,然后咱再返回多少个数据.

所以我把数据存储到了环形队列,SSL要多少我就给多少.

 

 

 

5.网络发送函数

 

 

 

 

 

6. SSL初始化

 

 

 

 

 

 

7.等待SSL握手完成(商议好最终通信的对称加密方式和秘钥)

其实最底层还是TCP,只不过是经过SSL对通信做了验证,对数据进行了加密.

所以首先还是需要TCP连接,然后再进行SSL.

 

 

 

 

8.以后接收数据使用的是 mbedtls_ssl_read

 

 

 

 

 

9.以后发送数据调用的是 mbedtls_ssl_write

 

 

 

 

 

 

 

 

 

结语

 

1.忘了说一件事情,调整了堆区大小

mbedtls库占用的内存有点高哈!这可不行!后面的时间我看看怎么做优化

 

 

 

2.为了节省内存开销,我设置了套件是下面这个,请根据自己的服务器修改

 

 

 

 

 

3.其实整体上看,最终SSL就相当于把数据做了一次中转.

当然还有做验证,这一节没有写证书验证部分,是因为内存吃力!!!

后面的日子里我好好研究下源码,看看怎么省内存.

 

posted on 2020-10-20 08:55  杨奉武  阅读(111)  评论(0编辑  收藏

淘宝 QQ群