完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
版本idf-3.2,example/protocols/mqtt/ssl_mutual_aut例程,客户端认证正常,加人服务器认证后报-0x2700错误。
错误信息: E (1193558) esp-tls: mbedtls_ssl_handshake returned -0x2700 I (1193558) esp-tls: Failed to verify peer certificate! I (1193558) esp-tls: verification info: ! The certificate is signed with an unacceptable key (eg bad curve, RSA too short). E (1193578) esp-tls: Failed to open new connection E (1193578) TRANS_SSL: Failed to open a new connection E (1193588) MQTT_CLIENT: Error transport connect 证书定义: extern const uint8_t client_cert_pem_start[] asm("_binary_client_crt_start"); extern const uint8_t client_cert_pem_end[] asm("_binary_client_crt_end"); extern const uint8_t client_key_pem_start[] asm("_binary_client_key_start"); extern const uint8_t client_key_pem_end[] asm("_binary_client_key_end"); extern const uint8_t server_cert_pem_start[] asm("_binary_mosquitto_org_crt_start"); extern const uint8_t server_cert_pem_end[] asm("_binary_mosquitto_org_crt_end") mqtt配置: const esp_mqtt_client_config_t mqtt_cfg = { .uri = "mqtts://test.mosquitto.org:8884", .event_handle = mqtt_event_handler, .cert_pem = (const char *)server_cert_pem_start, .client_cert_pem = (const char *)client_cert_pem_start, .client_key_pem = (const char *)client_key_pem_start, }; |
|
相关推荐
1个回答
|
|
根据您提供的错误信息,问题出在 SSL/TLS 握手过程中,客户端无法验证服务器的证书。错误代码 -0x2700 表示证书验证失败。具体来说,错误信息指出证书是用不可接受的密钥签名的,例如曲线不正确或 RSA 密钥太短。
要解决这个问题,请按照以下步骤操作: 1. 检查服务器证书:首先,确保服务器证书是有效的,并且使用正确的密钥类型和长度。您可以使用 OpenSSL 命令行工具来检查证书的详细信息: ``` openssl x509 -in server.crt -text -noout ``` 2. 确保证书链完整:确保服务器证书与其 CA 证书链正确链接。您可以使用以下命令查看证书链: ``` openssl verify -CAfile ca.crt server.crt ``` 3. 更新 ESP-IDF 和 MbedTLS:确保您使用的 ESP-IDF 和 MbedTLS 版本是最新的,以避免已知的 bug 或兼容性问题。 4. 配置 ESP-TLS:在您的 MQTT 客户端示例代码中,确保正确配置了 ESP-TLS。例如,使用以下代码初始化 ESP-TLS 连接: ```c esp_tls_cfg_t cfg = { .cacert_pem_buf = (const unsigned char *)cacert_pem_start, .cacert_pem_bytes = sizeof(cacert_pem_start), .clientcert_pem_buf = (const unsigned char *)client_pem_start, .clientcert_pem_bytes = sizeof(client_pem_start), .clientkey_pem_buf = (const unsigned char *)client_pem_start, .clientkey_pem_bytes = sizeof(client_pem_start), .skip_cert_common_name_check = false }; ``` 5. 重新编译和测试:在完成上述步骤后,重新编译您的示例代码,并测试 MQTT 客户端是否可以成功连接到服务器。 如果问题仍然存在,请提供更多关于您的设置和配置的详细信息,以便进一步分析和解决问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
598 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
443浏览 5评论
445浏览 4评论
415浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 06:13 , Processed in 0.870005 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号