开发者社区 > 物联网 > 正文

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

已解决

问题描述

我使用阿里云的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
  2. 线程堆栈大小足够大,有8MB
  3. TCP采用winsock2实现,保证缓存空间足够大

展开
收起
MichaelCYY 2022-09-17 10:31:46 570 0
3 条回答
写回答
取消 提交回答
  • 采纳回答

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

    2023-01-06 17:16:36
    赞同 展开评论 打赏
  • 我用的是ESP32模组,很在就调通了HTTPS的OTA,2023年12月再使用OTA时就有问题了。
    输出提示:OTA target firmware version: SV01.02, size: 1438832 Bytes
    delete most tasks to get sufficient memory...
    starting download thread in 2 seconds ......
    establish mbedtls connection with server(host='ota-cn-shanghai.iot-thing.aliyuncs.com', port=[443])
    bOTA_BOOT:0 OTA_BASE_ADRS: 0x00510000 PART_SIZE: 2097152
    mbedtls_ssl_recv error, res: -0x7200
    download failed, error code is -3869, try to send renewal request

    还是在网上找到了答案:image.png

    MBEDTLS_SSL_IN_CONTENT_LEN 变量修改处如下(原来分别是8192和4096):
    image.png
    再试OTA就可以了:image.png

    2024-01-05 11:37:07
    赞同 展开评论 打赏
  • 需要提供下完整日志,看以上日志mqtt连接是正常的,也是通过SSL的。

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

    2022-09-19 13:38:24
    赞同 展开评论 打赏

物联网领域前沿技术分享与交流

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载