14-STM32+CH395Q(以太网)基本控制篇(自建物联网平台)-移植mbedtls实现STM32+CH395Q以SSL单向认证方式连接MQTT服务器(不验证服务器证书)

2021-07-20 11:27:48 浏览数 (1)

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

说明

所谓SSL其实就是把通信的TCP数据进行了加密.SSL呢其实也算是协议.

整个的通信流程呢

TCP连接服务器 --> SSL握手(和服务器商量加密的密码) --> 组合发送的MQTT数据 -- 把数据经过SSL加密之后再发给服务器

开始(大家伙先按照步骤一步一步的操作,最后会详细说明整个程序运行流程)

开始(大家伙先按照步骤一步一步的操作,最后会详细说明整个程序运行流程)

开始(大家伙先按照步骤一步一步的操作,最后会详细说明整个程序运行流程)

1,工程就在这节的基础上进行更改

2.mbedtls-2.23.0是官方下载的包

3.建一个名字为 Mbedtls的文件夹

2.把mbedtls-2.23.0包里面的include和library 拷贝到Mbedtls文件夹里面

3.添加一个名字为 Mbedtls 的管理组

4.把 Library 里面的文件全部添加到里面

5.添加头文件路径

注意:上面只需要添加到 include路径即可!

6.编译一下工程

会报一些错误,没有关系,因为咱需要设置下配置文件

6.找到下面这个错误

其实这个地方并不是什么错误,只不过编译器不支持这样子写.

改为下面的样子

代码语言:javascript复制
asn1_get_sequence_of_cb_ctx_t cb_ctx;
        cb_ctx.cur = cur;
        cb_ctx.tag = tag;

7.打开 aes.c文件,然后右击打开 config.h

9.把里面所有的#define全部屏蔽

咱以后用到什么功能再打开什么功能.

需要屏蔽的很多,自己慢慢的屏蔽!

10.屏蔽完编译一下工程

11.把以下两个文件添加到工程

12.在连接TCP的后面初始化一下

13.把网络接收的数据存储到SSL缓存里面

14.替换自己的tcp发送数据函数

我加了个延时等待发送完成,实际项目中最好用缓存替代.

15.在config.h打开以下宏

#define MBEDTLS_HAVE_ASM

#define MBEDTLS_NO_UDBL_DIVISION

#define MBEDTLS_HAVE_TIME

#define MBEDTLS_ENTROPY_HARDWARE_ALT

#define MBEDTLS_AES_ROM_TABLES

#define MBEDTLS_CIPHER_MODE_CBC

#define MBEDTLS_KEY_EXCHANGE_RSA_ENABLED

#define MBEDTLS_NO_PLATFORM_ENTROPY

#define MBEDTLS_PKCS1_V15

#define MBEDTLS_SSL_PROTO_TLS1_2

#define MBEDTLS_AES_C

#define MBEDTLS_ASN1_PARSE_C

#define MBEDTLS_ASN1_WRITE_C

#define MBEDTLS_BIGNUM_C

#define MBEDTLS_CIPHER_C

#define MBEDTLS_CTR_DRBG_C

#define MBEDTLS_ENTROPY_C

#define MBEDTLS_GCM_C

#define MBEDTLS_MD_C

#define MBEDTLS_MD5_C

#define MBEDTLS_OID_C

#define MBEDTLS_PK_C

#define MBEDTLS_PK_PARSE_C

#define MBEDTLS_PLATFORM_C

#define MBEDTLS_RSA_C

#define MBEDTLS_SHA1_C

#define MBEDTLS_SHA256_C

#define MBEDTLS_SHA512_C

#define MBEDTLS_SSL_CLI_C

#define MBEDTLS_SSL_TLS_C

#define MBEDTLS_X509_USE_C

#define MBEDTLS_X509_CRT_PARSE_C

16.设置加密套件(关于加密套件用户可以先去了解各种对称加密,非对称加密算法.这个加密套件需要服务器上面支持)

#define MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256

17.设置堆空间(就是使用malloc时所能用的空间,SSL内部使用了不小的malloc .....)

记得选择stm32F103RET6及其以上型号(光使用SSL就需要至少60KB的ROM, 至少64KB的RAM)

我堆设置的是 a000

18.编译一下

0 人点赞