阿里云自带的mbedtls出错,无法使用任何SSL服务[阿里云Iot]

问题描述

我使用阿里云的C Link SDK能够正常保持MQTT长连接,但是一旦要用到需要SSL支持的服务就会报错。我已经把MBEDTLS_SSL_MAX_CONTENT_LEN设置为2097152了(2MB),还是不行。还请各位高人解答。以下是部分运行日志。我设置了mbedtls debug level为1,只输出错误信息。

[1663380924.825][LK-0313] MQTT user calls aiot_mqtt_connect api, connect
[1663380924.825][LK-032A] mqtt host: XXX
[1663380924.825][LK-0317] user name: XXX
[1663380924.825][LK-0318] password: XXX
unknown option
establish mbedtls connection with server(host='XXX', port=[443])
[1663380925.195][LK-1000] establish mbedtls connection with server(host='XXX', port=[443])
[1663380925.466][LK-1000] success to establish mbedtls connection, (cost 0 bytes in total, max used 0 bytes)
[1663380925.566][LK-0313] MQTT connect success in 741 ms
AIOT_MQTTEVT_CONNECT
[1663380925.566][LK-0309] pub: /ota/device/inform/XXX/XXX
//...固件版本信息上报...

heartbeat response
mbedtls_ssl_fetch_input() returned -26624 (-0x6800)
mbedtls_ssl_read_record_layer() returned -26624 (-0x6800)
mbedtls_ssl_read_record() returned -26624 (-0x6800)
[1663380930.784][LK-1000] mbedtls_ssl_fetch_input() returned -29312 (-0x7280)
[1663380930.784][LK-1000] mbedtls_ssl_read_record_layer() returned -29312 (-0x7280)
[1663380931.937][LK-0309] pub: /ota/device/upgrade/XXX/XXX
//...OTA推送消息...
ota_recv_handler:OTA target firmware version: V1.1.0, size: 816368 Bytes
ota_download_thread:starting download thread in 2 seconds ......

establish mbedtls connection with server(host='XXX', port=[443])
[1663380932.302][LK-1000] establish mbedtls connection with server(host='XXX', port=[443])
[1663380932.383][LK-1000] unknown record type
[1663380932.383][LK-1000] mbedtls_ssl_read_record_layer() returned -29184 (-0x7200)
[1663380932.383][LK-1000] mbedtls_ssl_read_record() returned -29184 (-0x7200)
[1663380932.383][LK-1000] mbedtls_ssl_handshake error, res: -0x7200
[1663380932.392][LK-1000] adapter_network_deinit
ota_download_thread:download failed, error code is 0, try to send renewal request

期望结果

SSL服务应该正常运行,不应该报错。

已尝试的方法

  1. 设置#define MBEDTLS_SSL_MAX_CONTENT_LEN               2097152
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. 我回来解答了,经过测试和移植之后发现是阿里云自身的mbedtls出了问题,具体是什么问题我也不清楚,后来我在PC端用openssl解决了问题,在嵌入式中采用厂家配备的mbedtls也没有问题。建议大家不要直接使用阿里云的C Link SDK,这个包过于臃肿且不利于自身对内部实现的理解。最后我通过了解阿里云的MQTT通信协议自行实现了设备与物联网的通信。PC端不必多说了,openssl+mqtt有一堆可以立刻使用的工具库;嵌入式设备端,建议使用厂家自带的mbedtls和mqtt来实现。我的esp32则直接采用esp-mqtt+mbedtls实现,调一下设置立刻就通了。

  2. 需要提供下完整日志,看以上日志mqtt连接是正常的,也是通过SSL的。

    OTA下载文件的时候,SSL握手失败,看一下是不是host有问题?