AWS IoT Broker完成TLS握手后拒绝MQTT连接问题排查
AWS IoT MQTT客户端连接异常排查问题
背景信息
基于STM32H723芯片,使用FreeRTOS 10.3.1、LwIP 2.1.2和MbedTLS 2.28.4开发AWS IoT MQTT客户端,出现如下异常:
- 已通过调试及Wireshark抓包确认TLS握手成功完成
- 发送MQTT Connect报文后,IoT Broker返回加密告警(疑似TLS
close_notify)并关闭TCP连接
已完成的排查动作:
- 对照AWS故障排查指南确认证书有效
- 配置了允许所有IoT操作的策略(可通过
mosquitto_pub正常连接) - 客户端可正常连接本地Mosquitto Broker
- Wireshark解密后的MQTT Connect报文格式合规
疑问及解答
1. 如何查看Broker拒绝连接的原因?
- 开启MbedTLS底层调试日志:当前Debug日志未覆盖TLS后续交互,需启用MbedTLS的
MBEDTLS_DEBUG_C宏,实现自定义日志回调函数,捕获TLS连接关闭阶段的所有细节,包括Broker发送close_notify前的告警信息。 - 查看AWS IoT控制台日志:在AWS IoT控制台的日志管理模块,开启IoT Core日志并设置ERROR、WARN级别,可直接获取Broker侧记录的拒绝原因,比如客户端ID非法、协议版本不兼容、请求超时等。
- 模拟客户端参数测试:用
mosquitto_pub完全复刻客户端的Connect报文参数(client ID、协议版本、clean session等),验证参数配置是否存在隐性问题。
2. 当前软件栈是否存在已知问题?
- FreeRTOS + LwIP缓冲区配置问题:FreeRTOS 10.3.1与LwIP 2.1.2组合时,若
TCP_SND_BUF配置过小,可能导致Connect报文发送不完整,触发Broker异常关闭。需确认该缓冲区大小大于TLS封装后的Connect报文长度。 - MbedTLS 2.28.4会话复用问题:该版本存在会话复用状态清理不彻底的已知问题,可能导致应用层数据被Broker判定为非法。可尝试关闭
MBEDTLS_SESSION_TICKETS_C宏禁用会话复用后重试。 - MQTT协议版本兼容性:AWS IoT Broker对MQTT 3.1.1支持更稳定,若客户端使用MQTT 3.1版本,可能存在隐性兼容问题。需确认代码中是否指定了
MQTT_PROTOCOL_VERSION_3_1_1。
内容的提问来源于stack exchange,提问作者Rsala
相关产品推荐
相关产品推荐

