<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就相當於把數據做了一次中轉.
當然還有做驗證,這一節沒有寫證書驗證部分,是因為內存吃力!!!
后面的日子里我好好研究下源碼,看看怎么省內存.
