# ESP32开发踩坑:HTTPS下载文件报错解决方案

97 阅读2分钟

一、问题背景

在ESP32项目开发中,当我兴冲冲地写完HTTPS下载代码,满怀期待地烧录到板子上时,串口监视器却无情地甩给我一连串红色错误... 这篇文章记录了我如何从一脸懵逼到恍然大悟的完整过程。

开发环境:

  • 开发板:ESP32-S3-N16R8
  • 框架:ESP-IDF
  • 需求:从HTTPS服务器下载文件

二、错误现象

运行代码后,串口监视器疯狂输出错误日志:

E (4108) esp-tls-mbedtls: No server verification option set in esp_tls_cfg_t structure
E (4108) esp-tls-mbedtls: Failed to set client configurations, returned [0x8017] (ESP_ERR_MBEDTLS_SSL_SETUP_FAILED)
E (4118) esp-tls: create_ssl_handle failed
E (4128) esp-tls: Failed to open new connection
E (4138) transport_base: Failed to open a new connection
E (4148) HTTP_CLIENT: Connection failed, sock < 0
E (4148) HTTP: ❌ 下载失败: ESP_ERR_HTTP_CONNECT

三、问题分析

经过排查发现ESP-IDF多层配置问题,编译时配置会覆盖运行时配置。

编译时配置(sdkconfig/menuconfig)

  • 全局默认行为
  • 在编译时确定

运行时配置(代码中config结构体)

  • esp_http_client_config_t
  • 在运行时配置

关键点: 即使代码中设置了skip_cert_common_name_check = true 如果sdkconfig 中没有启动CONFIG_ESP_TLS_INSECURE的话ESP-TLS底层仍会强制要求证书验证

No server verification option set in esp_tls_cfg_t structure

该错误说明ESP-TLS层在初始化SSL连接时发现既没有提供证书,也没有设置跳过验证的全局选项导致无法建立安全连接

四、解决方案

menuconfig配置

terminal输入idf.menuconfig Conponent config -> ESP-TLS 具体配置界面如下 image.png

五、安全性说明

禁用SSL证书验证会导致: 1.中间人攻击MITM风i西安:无法验证服务器身份 2.数据被窃听风险 3.不符合生产环境要求