<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.找到下面这个错误
其实这个地方并不是什么错误,只不过编译器不支持这样子写.
改为下面的样子
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.编译一下
14-STM32+CH395Q(以太网)基本控制篇(自建物联网平台)-移植mbedtls实现STM32+CH395Q以SSL单向认证方式连接MQTT服务器(不验证服务器证书)