首页 > 解决方案 > ESP32 MQTT 多代理设置

问题描述

我正在尝试使用 ESP-IDF 同时连接到 2 个 MQTT 代理。一个在 TLS 端口 8883 上,另一个在端口 1883 上不安全。

我已经声明了 2 个客户端实例,但不知何故我无法让它们连接到代理。

如果我注释掉一个或另一个,它工作得很好。

源代码:

// Device manager configuration
    esp_mqtt_client_config_t mqtt_device_manager_cfg = {
        .uri = MQTT_DEVICE_MANAGER_URI,
        .port = MQTT_DEVICE_MANAGER_PORT,
        .username = (const char*) device_UUID,
        .password = MQTT_DEVICE_MANAGER_PASSWORD,
        .client_id = (const char*) device_UUID,
        .disable_clean_session = 1,
        .cert_pem = client_cert_pem,
        .transport = MQTT_TRANSPORT_OVER_SSL
    }; 
    device_manager_mqtt_client = esp_mqtt_client_init(&mqtt_device_manager_cfg);
    esp_mqtt_client_register_event(device_manager_mqtt_client, ESP_EVENT_ANY_ID, mqtt_device_manager_event_handler, NULL);
    esp_mqtt_client_start(device_manager_mqtt_client);
    
// MQTT configuration
    esp_mqtt_client_config_t mqtt_cfg = {
        .uri = MQTT_URI,
        .port = MQTT_PORT,
        .username = MQTT_USERNAME,
        .password = MQTT_PASSWORD,
        .transport = MQTT_TRANSPORT_OVER_TCP
    };
    mqtt_client = esp_mqtt_client_init(&mqtt_cfg);
    esp_mqtt_client_register_event(mqtt_client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);
    esp_mqtt_client_start(mqtt_client);

错误:

E (5078) esp-tls: mbedtls_ssl_handshake returned -0x2700
I (5078) wifi:I (5078) esp-tls: Failed to verify peer certificate!
int: state=0 i=0
I (5078) esp-tls: verification info:   ! The certificate is not correctly signed by the trusted CA

E (5088) esp-tls: Failed to open new connection
E (5098) TRANS_SSL: Failed to open a new connection
E (5098) MQTT_CLIENT: Error transport connect

不知何故,不安全的客户端似乎认为它是安全的并且正在尝试使用它不应该使用的证书。

我究竟做错了什么?

标签: sslmqttesp32

解决方案


如果我删除 .cert_pem 值,它会以某种方式工作。


推荐阅读