如何解决ESP32使用Twilio API时的ESP-TLS连接错误?
问题:ESP32通过Twilio API发送SMS时TLS连接失败
开发板可正常连接WiFi,但调用Twilio API发送SMS时出现以下TLS错误,无法建立连接:
E (30400) esp-tls-mbedtls: No server verification option set in esp_tls_cfg_t structure. Check esp_tls API reference E (30400) esp-tls-mbedtls: Failed to set client configurations, returned [0x8017] (ESP_ERR_MBEDTLS_SSL_SETUP_FAILED) E (30400) esp-tls-mbedtls: No server verification option set in esp_tls_cfg_t structure. Check esp_tls API reference E (30420) esp-tls: create_ssl_handle failed E (30430) esp-tls: Failed to open new connection E (30480) HTTP_CLIENT: Connection failed, sock < 0
已在sdkconfig中设置Allow potentially insecure options和Skip server certificate verification by default(SDK配置编辑器及sdkconfig文件均已修改)。
当前客户端配置代码:
esp_http_client_config_t config = { .url = twilio_url, .method = HTTP_METHOD_POST, .auth_type = HTTP_AUTH_TYPE_BASIC, }; esp_http_client_handle_t client = esp_http_client_init(&config); esp_http_client_set_header(client, "Content-Type", "application/x-www-form-urlencoded"); esp_http_client_set_username(client, account_sid); esp_http_client_set_password(client, auth_token);
解决方案
即使全局设置了跳过证书验证,仍需在esp_http_client_config_t中显式指定TLS验证选项,否则ESP-TLS会因未配置验证策略而报错。修改配置结构体,添加以下参数:
esp_http_client_config_t config = { .url = twilio_url, .method = HTTP_METHOD_POST, .auth_type = HTTP_AUTH_TYPE_BASIC, .skip_cert_common_name_check = true, // 跳过证书通用名检查 .tls_cfg = { .verify_certificate = false, // 禁用服务器证书验证 }, };
说明
verify_certificate = false直接禁用证书验证,匹配全局设置的“Skip server certificate verification by default”skip_cert_common_name_check = true跳过证书通用名与URL域名的匹配检查,避免因域名不匹配导致的验证失败
修改后重新编译烧录,即可正常建立TLS连接并发送SMS。
内容的提问来源于stack exchange,提问作者Chandler Thornton
相关产品推荐
相关产品推荐

