Thread 中讨论的其他器件: CC3235SF
尊敬的 TI 团队:
我在使用 CC3235MODASF 一方 SimpleLink SDK 7.10.00.13 、我正在尝试使用连接到公共 MQTT 代理 (mosquitto.org) TLS 。
连接时相同的代码工作正常 不具有安全性(普通 MQTT) 。
以下是我的 MQTT 配置:
MQTT_IF_ClientParams_t mqttClientParams = {
ClientId, // client ID
MQTT_CLIENT_USERNAME, // user name
MQTT_CLIENT_PASSWORD, // password
MQTT_CLIENT_KEEPALIVE, // keep-alive time
MQTT_CLIENT_CLEAN_CONNECT, // clean connect flag
MQTT_CLIENT_MQTT_V3_1, // true = 3.1, false = 3.1.1
MQTT_CLIENT_BLOCKING_SEND, // blocking send flag
&mqttWillParams // will parameters
};
char *MQTTClient_secureFiles[1] = {"mosquitto.org.crt"};
MQTTClient_ConnParams mqttConnParams = {
MQTT_CONNECTION_FLAGS,
MQTT_CONNECTION_ADDRESS, // "test.mosquitto.org"
MQTT_CONNECTION_PORT_NUMBER, // 8883
SLNETSOCK_SEC_METHOD_SSLv3_TLSV1_2,
SLNETSOCK_SEC_CIPHER_FULL_LIST,
1,
MQTTClient_secureFiles
};
void *mqttClientThreadFxn(void * args)
{
int32_t ret;
MQTTClient_Handle mqttClientHandle = NULL;
unsigned long resolvedIP;
UART_PRINT("[MQTT] client started.\r\n");
startSNTP();
ret = MQTT_IF_Init(mqttInitParams);
if (ret < 0) {
UART_PRINT("[MQTT] Init failed (%d)\r\n", ret);
goto thread_exit;
}
DBG_PRINT("[MQTT] Initialized.\r\n");
while (1)
{
if (connected == 0)
{
UART_PRINT("[MQTT] Attempting connection...\r\n");
mqttClientHandle = MQTT_IF_Connect(mqttClientParams, mqttConnParams, MQTT_EventCallback);
if ((int)mqttClientHandle < 0) {
UART_PRINT("[MQTT] Connect failed (%d), retry \r\n", (int)mqttClientHandle );
sleep(1);
continue;
}
UART_PRINT("[MQTT] Connected to broker.\r\n");
ret = 0;
for (int i = 0; i < board->do_num; i++) {
snprintf(topic, sizeof(topic), "TEST/%02X/AA/%d", net_id, i);
ret |= MQTT_IF_Subscribe(mqttClientHandle, topic, MQTT_QOS_2, ToggleAACB);
}
for (int i = 0; i < board->ao_num; i++) {
snprintf(topic, sizeof(topic), "TEST/%02X/BB/%d", net_id, i);
ret |= MQTT_IF_Subscribe(mqttClientHandle, topic, MQTT_QOS_2, ToggleBBCB);
}
if (ret < 0)
UART_PRINT("[MQTT] Subscribe failed (%d)\r\n", ret);
else
UART_PRINT("[MQTT] Subscribed to topics.\r\n");
}
else if (connected == 1)
{
// publish
MQTT_IF_Publish(mqttClientHandle, topic, payload, strlen(payload), mqtt->io[i].qos/*MQTT_QOS_2*/);
}
}
// Stop / Cleanup
if (connected) {
MQTT_IF_Disconnect(mqttClientHandle);
}
MQTT_IF_Deinit();
DBG_PRINT("[MQTT] Deinitialized.\r\n");
thread_exit:
UART_PRINT("[MQTT] Client Thread exiting.\r\n");
pthread_exit(NULL);
return NULL;
}
在连接之前、我还会调用startSNTP()同步时间。
良好
Plain MQTT(端口 1883)→工作正常
-
Secure MQTT(端口 8883)→失败
-456 -
上载
mosquitto.org.crt到/userFiles/并重试→后、立即失败-461
在→仍然失败之前添加了 SNTP -461
日志输出
[MQT]客户端已启动。
[WIFI M]获取 STA IP:172.20.20
startSNTP:当前时间:星期二 Oct 28 00:24:45 2025
[MQT]已初始化。
[MQT]正在尝试连接...
上下文线程:正在运行
连接失败:–461
MQTT 客户端 CB:断开连接
我尝试过的
-
已验证 SNTP:当前时间显示正确 (
2025/10/28) -
已验证是否已上载根 CA 文件 (
mosquitto.org.crt) -
使用具有相同证书的 PC MQTT 客户端可验证连接是否正常工作
问题
-
哪个原因导致出现
-461错误MQTT_IF_Connect(SSL/TLS 连接失败)? -
CC3235SF 是否会根据验证代理证书日期 系统 SNTP 时间 ?
-
是否有办法检查哪个证书字段导致验证错误?
-
是否有已知的工作证书链
test.mosquitto.org?
感谢您的帮助!