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


    <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.编译一下

  • 相关阅读:
    C#中StringBuilder类的使用总结
    java Socket长链接与消息推送源码与演示
    oracle merge into 小例
    webrtc 关闭摄像头
    WebRTC MediaRecorder API
    简单的菜单三
    简单的菜单二
    简单的菜单 一
    文件断点续传实现 ( 2-- C# 客户端)
    文件断点续传实现 (1 -- java实现)
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/15028243.html
Copyright © 2020-2023  润新知