乐鑫技术交流
直播中

王银喜

8年用户 2558经验值
私信 关注
[问答]

ESP32使用HTTPS协议无法与服务器建立连接怎么解决?

说明:1、ESP-IDF版本为v4.3.3,
          2、参考的例程为examplesprotocolsesp_http_client的https_with_url
          3、网络连接正常,远程的HTTPS地址正常(使用其他工具验证能连接且能收到服务器返回的数据)
          4、源码附在最后。

问题如下:1、参考此例程  默认配置参数 .is_async = false  ,初始化时直接报错 :The certificate is not correctly signed by the trusted CA!           将.is_async = true  ,能过初始化。

              2、初始话结束,esp_http_client_perform函数返回值 Error perform http request ESP_ERR_HTTP_EAGAIN

目前本人已经试了很多方法,也按照idf编程技术指南操作流程改了代码,都不行。  也看了其他高版本的IDF这边使用方式都不一样。所以针对此IDF的版本,望技术支持给出合理的解决方法,如何修改?

源码:

    esp_http_client_config_t config = {
        .url = "https://indoor.xxxx(此处打码).net/api/extra/test1",
        .event_handler = _http_event_handler,
        .is_async = true,
        .cert_pem = howsmyssl_com_root_cert_pem_start,
    };

esp_http_client_handle_t client = esp_http_client_init(&config);
err = esp_http_client_perform(client);
if (err == ESP_OK)
{
      ESP_LOGI(TAG, "HTTP POST Status = %d, content_length = %d",
                            esp_http_client_get_status_code(client),
                            esp_http_client_get_content_length(client));
}
else
{
     ESP_LOGE(TAG, "Error perform http request %s", esp_err_to_name(err));
}
                                                                                                                                                           

回帖(1)

程成

2024-6-12 16:34:44
根据您提供的信息,我将尝试帮助您解决ESP32使用HTTPS协议无法与服务器建立连接的问题。请按照以下步骤操作:

1. 确保证书有效:首先,请确保您使用的HTTPS服务器证书是有效的,并且已经由受信任的CA(证书颁发机构)签名。您可以使用在线工具或命令行工具(如openssl)来验证证书的有效性。

2. 导入证书:将服务器的证书导入到ESP32的项目中。您可以将证书转换为PEM格式,然后将其放置在项目的某个目录下。例如,将证书保存为`server_cert.pem`。

3. 修改源码:在您的源码中,找到与HTTPS连接相关的部分。您需要修改代码以使用导入的证书。以下是修改后的示例:

```c
#include "esp_https_ota.h"

// ...

static const char *server_cert_pem = "..."; // 将证书内容放置在这里

esp_err_t event_handler(esp_event_base_t base, int32_t event_id, void *data) {
    // ...
}

void app_main() {
    esp_https_ota_config_t config = {
        .server = "https://your_server_address",
        .server_cert_pem = server_cert_pem,
        .event_handler = event_handler,
    };

    esp_err_t ret = esp_https_ota_init(&config);
    if (ret == ESP_OK) {
        ESP_LOGI(TAG, "ESP-HTTPS-OTA Initialized");
        esp_https_ota_begin();
    } else {
        ESP_LOGE(TAG, "Failed to initialize ESP-HTTPS-OTA (%d)", ret);
    }
}
```

4. 重新编译和烧录:在完成上述修改后,重新编译您的项目并将其烧录到ESP32设备上。

5. 测试连接:运行您的应用程序,检查是否能够成功建立HTTPS连接并接收服务器返回的数据。

6. 调试:如果问题仍然存在,请使用ESP-IDF的调试工具(如OpenOCD)来调试您的应用程序。检查是否有任何错误或警告信息,这将有助于您找到问题的根源。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分