【发布时间】:2020-08-17 10:00:33
【问题描述】:
我正在尝试使用 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
不知何故,不安全的客户端似乎认为它是安全的并试图使用它不应该使用的证书。
我做错了什么?
【问题讨论】:
-
如果我在它们之间添加 5 秒的延迟,我会收到以下错误:E (17918) TRANS_SSL: ssl_poll_read select error 113, errno = Software caused connection abort, fd = 54 E (17928) MQTT_CLIENT:轮询读取错误:0,中止连接 E (17928) TRANS_TCP:tcp_poll_read 选择错误 113,errno = 软件导致连接中止,fd = 55 E (17948) MQTT_CLIENT:轮询读取错误:0,中止连接 E (32948) MQTT_CLIENT : 错误传输连接