ssl - 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
不知何故,不安全的客户端似乎认为它是安全的并且正在尝试使用它不应该使用的证书。
我究竟做错了什么?
解决方案
如果我删除 .cert_pem 值,它会以某种方式工作。
推荐阅读
- google-apps-script - Web 应用程序用户可以安排应用程序脚本触发器在给定时间发送电子邮件吗?
- css - 相对于单击的元素定位离子弹出箭头
- android - 声明 findViewById 'global'
- reactjs - 如何使用 react 和 typescript 将类型添加到 graphql 模式?
- sql - 查找给定日期学期的最后一天
- reactjs - 传单标记渲染但显示“损坏的图像”占位符
- sql - 在行列表中查找最大值并返回整行 SQL Server
- javascript - Javascript将对象列表转换为具有键值的对象
- excel - Excel 自动格式化
- javascript - 如何仅在 vuejs 中使用带有字符和数字的文本框?