乐鑫Esp32学习之旅30 对接华为IoT物联网平台适配踩坑,使用ESP-IDF 编程使用HTTPS请求固件跳过证书校验,实现OTA远程升级文件。(附带源码)

Posted 半颗心脏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了乐鑫Esp32学习之旅30 对接华为IoT物联网平台适配踩坑,使用ESP-IDF 编程使用HTTPS请求固件跳过证书校验,实现OTA远程升级文件。(附带源码)相关的知识,希望对你有一定的参考价值。


  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

系列一:ESP32系列模组基础学习系列笔记

1、 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 “Hellow World”。
2、 巧用eclipes编辑器,官方教程在在Windows下搭建esp32开发环境,打印 “Hellow World”。
3、 认识基本esp32的GPIO接口,开始点亮您的第一盏 LED和中断回调实现按键功能 。
4、体会esp32的强大的定时器功能, 实现定时2s闪烁一盏LED灯。
5、接触实践esp32的pwm宽度脉冲功能, 实现呼吸效果闪烁一盏LED灯。
6、smartConfig和微信airKiss在esp32的实现,一键配网轻松快捷连接路由器。
7、利用GPIO中断做一个按键的短按和长按的回调事件,再也无须担心触发源。
8、esp32上实现本地 UDP 客户端和服务端角色,在局域网内实现通讯。
9、esp32上实现本地 TCP 客户端和服务端角色,可断线重连原路返回数据。
10、乐鑫esp32 SDK编程利用rmt驱动ws2812七彩灯,实现彩虹渐变效果。
11、入门 乐鑫esp-adf 音频框架开发,esp32造一个蓝牙耳机,实现切换歌曲,获取歌曲信息等功能。
12、开源一个微信公众号airkiss配网esp32以及局域网发现功能的工程,分享一个airkiss配网小工具。
13、esp32 内置 dns 服务器,无需外网访问域名返回指定网页。
14、esp32 sdk编程实现门户强制认证,连接esp32热点之后,自动强制弹出指定的登录界面。
15、认识本地离线语音唤醒识别框架 esp-skainet ,实现较低成本的硬件语音本地识别控制。
16、学习本地语音唤醒离线识别框架 esp-skainet ,如何修改唤醒词? 如何自定义命令词?如何做意图动作?
17、全网首发,乐鑫esp32 sdk直连京东微联·小京鱼 · IoT开放平台,实现叮咚音响语音智能控制。
18、入门京东微联·小京鱼的控制面板H5开发,读懂vue语法,做自己的控制页面。
19、重磅开源,如何在微信小程序上ble蓝牙配网esp32,blufi的那些事!
20、一篇好文,开发过程中编译esp32固件太大,无法正常启动?教你如何自定义分区表partitions.csv。
21、 esp32蓝牙配网blufi的高度封装,集成简单、使用简单、容易上手,提高开发效率!
22、讨论下程序员 “青春饭” 那些事,分享在esp32实现多种加密算法md5 |AES CBC-ECB| Sha1 | Sha256 等!
23、安信可 esp32-a1s 音频开发板移植最新 esp-adf 音频框架,小试牛刀如何实现在线文字转语音播放。
25、分享在 esp32 SDK实现冷暖光色温平滑调节的封装,轻松集成到您的项目去。
26、分享下如何在window下使用CMake编译,编译速度提高传统 make 编译一个档次,支持 ESP32 和 ESP32-C3。
27、windows10平台下自带的Linux安装 ESP8266/ESP32 环境,再无需额外安装虚拟机了。
28、熟悉自定义分区表 partition,拉取阿里云对象存储的单片机/图片等较大文件保存在特定的存储位置,并读取出来做完整性校验。
29、安信可Wi-Fi模组对接华为云物联网平台的指南。
30、对接华为IoT物联网平台适配踩坑,使用ESP-IDF 编程使用HTTPS请求固件跳过证书校验,实现OTA远程升级文件。

系列二:ESP32-Camera 摄像头开发板系列笔记

1、安信可 ESP32-Cam 摄像头开发板二次开发 C SDK编程,实现MQTT远程拍照传输到私有服务器。
2、安信可 ESP32-Cam 摄像头开发板二次开发 C SDK编程,实现本地视频流监控。
3、安信可 ESP32-Cam 摄像头开发板二次开发 C SDK编程,拍照图片通过有线串口传到上位机PC端。

系列三:ESP32-C3 模组系列笔记

1、【蓝牙Mesh笔记 ①】ESP32-C3 模组上实现天猫精灵蓝牙 BLE Mesh AliGenie 接入,无需WiFi 连接也可以实现天猫精灵语音控制。

系列四:ESP32-S3 模组系列笔记

1、安信可 ESP32-S3 模组上驱动摄像头 OV2640,实现远程拍照并 HTTP 传输到阿里云对象存储OSS,并显示在微信小程序上。。

系列四:ESP32模组系列笔记 LVGL LittlevGL

1、【LittlevGL ESP32 学习笔记 ①】移植最新的 LVGL 到安信可ESP32\\C3模组,显示一个二维码。


文章目录

一、前言

最近有需求要对接华为云物联网平台,所以准备做成一套SDK给大家使用,在遇到这么一个场景,在开发最后阶段的OTA升级时候,发现需要跳过SSL校验,我本着很纳闷的心态在思考:华为也不缺人力物力啊,一个域名+证书都无法确定下来?还是用的人太少了,所以没怎么注意这块的体验?

下面是对话截图,记录与2022.3.1,截至今天 2022.4.3 发文,仍然未解决此问题。


不可厚非的是,在一些开发场景中,由于域名证书频繁更高,或者证书过期,需要更换证书,但是由于还未来得及更新证书,导致本地校验证书失败,所以,我们须在单向认证时候,不做证书校验,那么我们应该如何做呢?

只能跳过证书校验呗!


二、选择的框架?

既然需要跳过校验SSL,那么我选择 mbedtls 加密库,因为这个库是开源的,资料也很多,自己也熟悉。OTA升级的话,干脆选择例程自带的吧。

mbedtls 在发起校验请求时候,我们只要把这个数值设置为 MBEDTLS_SSL_VERIFY_NONE 即可,表示不校验。

#define MBEDTLS_SSL_VERIFY_NONE       0     // 不校验SSL
#define MBEDTLS_SSL_VERIFY_OPTIONAL     1     // 校验SSL,在 mbedtls_ssl_get_verify_result 提示结果让用户自行选择是否继续请求网址
#define MBEDTLS_SSL_VERIFY_REQUIRED     2     // 必须校验SSL

mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_NONE);

三、如何使用

为了学习笔记,以及后续可能会继续用到这样的场景,于是乎,我就封装了一下,也分享给大家使用,源码获取见最后。依赖的esp-idf 版本 v4.3 ,我使用的 commit 如下:

commit 8ffddf53bc9cb0c36d1949476e244b202f3b42d2 (origin/release/v4.3)

如何使用此Demo

  • 先配置路由器信息。
  • 修改ota文件的URL,并且修改是否需要跳过证书。
  • 支持证书校验或证书不校验。

API 说明

见注释:

  typedef enum
    
        OTA_CERT_SSL_VERIFY_NONE = 0, // 不校验证书,直接通过
        OTA_CERT_SSL_VERIFY_OPTIONAL, // 校验证书并给出结果,由用户决定是否继续请求
        OTA_CERT_SSL_VERIFY_REQUIRED, // 校验证书并给出结果,必须证书通过才继续请求
     ota_ssl_cert_verify_set_t;

    /**
     * @brief otas_http_client_config configuration
     */
  typedef struct
  
        const char *url;
        ota_ssl_cert_verify_set_t cert_set;
        bool skip_ssl_cert_set; //是否跳过证书认证,仅当 ota_ssl_cert_verify_set_t 为 OTA_CERT_SSL_VERIFY_OPTIONAL有效
        int url_length;
   otas_http_client_config;
    
 esp_err_t start_https_ota(const otas_http_client_config *config);

五、常见问题 FAQ

1. 如何替换证书?

请把域名证书替换 https_ota\\cert\\server_root_cert.pem 里面内容即可。

2. 如何支持HTTPS连接,但不做证书校验?

参数开始时候,请把 cert_set 设置为 OTA_CERT_SSL_VERIFY_OPTIONAL ,把 skip_ssl_cert_set设置为 false 。

 .cert_set = OTA_CERT_SSL_VERIFY_OPTIONAL,
 .skip_ssl_cert_set = false,

本文章的源码免费获取:https://github.com/xuhongv/StudyInEsp32/tree/master/27_ota_https_skip_cert_option
ESP32/C3/S3对接华为云IoT物联网平台 esp-idf 源码:https://blog.csdn.net/xh870189248/article/details/123777199


另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!

  • 玩转无线物联网带你飞、加千人群讨论,群里众多国内ESP开发者,找到你一份归属,免费白嫖。
  • QQ讨论一群,点击加群:434878850
  • QQ讨论二群,点击加群:623325168
  • 个人微信公众号:徐宏blog , 不定时推送干货文章,不推送任何广告。
  • 个人邮箱:xuhongv@yeah.net 24小时在线,有发必回复!
  • esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
  • esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
  • 关注下面微信公众号二维码,干货多多,第一时间推送!

以上是关于乐鑫Esp32学习之旅30 对接华为IoT物联网平台适配踩坑,使用ESP-IDF 编程使用HTTPS请求固件跳过证书校验,实现OTA远程升级文件。(附带源码)的主要内容,如果未能解决你的问题,请参考以下文章

乐鑫Esp32学习之旅30 对接华为IoT物联网平台适配踩坑,使用ESP-IDF 编程使用HTTPS请求固件跳过证书校验,实现OTA远程升级文件。(附带源码)

乐鑫Esp32学习之旅30 对接华为IoT物联网平台适配踩坑,使用ESP-IDF 编程使用HTTPS请求固件跳过证书校验,实现OTA远程升级文件。(附带源码)

乐鑫Esp32学习之旅29 安信可Wi-Fi模组对接华为云物联网平台的指南。(附带源码)

乐鑫Esp32学习之旅29 安信可Wi-Fi模组对接华为云物联网平台的指南。(附带源码)

乐鑫Esp32学习之旅29 安信可Wi-Fi模组对接华为云物联网平台的指南。(附带源码)

乐鑫Esp32学习之旅29 安信可Wi-Fi模组对接华为云物联网平台的指南。(附带源码)