【已解决】ESP32使用HTTPS协议无法与服务器建立连接问题

espckzyzh
Posts: 5
Joined: Mon Mar 20, 2023 7:40 am

【已解决】ESP32使用HTTPS协议无法与服务器建立连接问题

Postby espckzyzh » Mon Mar 20, 2023 8:03 am

说明:1、ESP-IDF版本为v4.3.3,
2、参考的例程为examples\protocols\esp_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));
}

ESP_YJM
Posts: 300
Joined: Fri Feb 26, 2021 10:30 am

Re: ESP32使用HTTPS协议无法与服务器建立连接问题

Postby ESP_YJM » Tue Mar 21, 2023 2:56 am

1. .is_async = false 报错 The certificate is not correctly signed by the trusted CA! 并不是初始化报错,而是服务器的 CA 证书不是受信任的 CA 机构签发的,导致 SSL 握手失败,你可以通过 idf.py menuconfig 配置使能 Component config->ESP-TLS->[*] Allow potentially insecure options->[*] Skip server ...,并且 config 中去掉 cert_pem 证书,你贴的这个证书并不是你 URL 的 CA 证书。

Code: Select all

esp_http_client_config_t config = {
.url = "https://indoor.xxxx(此处打码).net/api/extra/test1",
.event_handler = _http_event_handler,
.is_async = false,
};
2. .is_async = true 返回 ESP_ERR_HTTP_EAGAIN 是你的使用有问题,你需要按照如下代码来使用,但是还是会出现第一点出现的问题。

Code: Select all

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

esp_http_client_handle_t client = esp_http_client_init(&config);

do  {
	err = esp_http_client_perform(client);
} while (err == ESP_ERR_HTTP_EAGAIN);

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));
}

espckzyzh
Posts: 5
Joined: Mon Mar 20, 2023 7:40 am

Re: ESP32使用HTTPS协议无法与服务器建立连接问题

Postby espckzyzh » Tue Mar 21, 2023 6:26 am

绕开SSL验证没问题了。如果需要验证SSL,这边如何修改

ESP_YJM
Posts: 300
Joined: Fri Feb 26, 2021 10:30 am

Re: 【已解决】ESP32使用HTTPS协议无法与服务器建立连接问题

Postby ESP_YJM » Wed Mar 22, 2023 2:11 am

你需要有 https://indoor.xxxx(此处打码).net/api/extra/test1 网址的 CA 证书,传入到 cert_pem 里。

espckzyzh
Posts: 5
Joined: Mon Mar 20, 2023 7:40 am

Re: 【已解决】ESP32使用HTTPS协议无法与服务器建立连接问题

Postby espckzyzh » Wed Mar 22, 2023 3:35 am

懂了 , 感谢回答!

espckzyzh
Posts: 5
Joined: Mon Mar 20, 2023 7:40 am

Re: 【已解决】ESP32使用HTTPS协议无法与服务器建立连接问题

Postby espckzyzh » Wed Mar 22, 2023 3:35 am

懂了 , 感谢回答!

Who is online

Users browsing this forum: No registered users and 159 guests