【问题标题】:AWS IoT closes mqtt connection after HandshakeAWS IoT 在握手后关闭 mqtt 连接
【发布时间】:2017-07-31 12:56:09
【问题描述】:

我有一个使用 AWS 开发工具包连接 AWS IoT 的实施。它在 Linux 上运行良好。 我正在尝试将其移植到基于 FreeRTOS 的嵌入式系统。 mbedtls 在带有 ssl 包装器的 AWS 开发工具包中使用。

mbedtls 方面有一些小的修改(我提供从 sntp 到 mbedtls 的时间)。

当我启用 mbedtls 调试时,我看到一切都很好并且握手已完成。但是在握手之后,我收到了来自 AWS SDK 的连接关闭消息。

ssl_cli.c : 3303 - client state: MBEDTLS_SSL_FLUSH_BUFFERS (14)
ssl_cli.c : 3303 - client state: MBEDTLS_SSL_HANDSHAKE_WRAPUP (15)
ssl_tls.c : 5024 - <= handshake wrapup
ssl_tls.c : 6346 - <= handshake

ssl_tls.c : 2701 - => write record
ssl_tls.c : 1258 - => encrypt buf
ssl_tls.c : 1400 - before encrypt: msglen = 125, including 0 bytes of padding
ssl_tls.c : 1560 - <= encrypt buf
ssl_tls.c : 2838 - output record: msgtype = 23, version = [3:3], msglen = 141
ssl_tls.c : 2416 - => flush output
ssl_tls.c : 2435 - message length: 146, out_left: 146
ssl_tls.c : 2441 - ssl->f_send() returned 146 (-0xffffff6e)
ssl_tls.c : 2460 - <= flush output
ssl_tls.c : 2850 - <= write record
ssl_tls.c : 6883 - <= write
ssl_tls.c : 6514 - => read
ssl_tls.c : 3728 - => read record
ssl_tls.c : 2208 - => fetch input
ssl_tls.c : 2366 - in_left: 0, nb_want: 5
ssl_tls.c : 2390 - in_left: 0, nb_want: 5
ssl_tls.c : 2391 - ssl->f_recv(_timeout)() returned 5 (-0xfffffffb)
ssl_tls.c : 2403 - <= fetch input
ssl_tls.c : 3488 - input record: msgtype = 21, version = [3:3], msglen = 26
ssl_tls.c : 2208 - => fetch input
ssl_tls.c : 2366 - in_left: 5, nb_want: 31
ssl_tls.c : 2390 - in_left: 5, nb_want: 31
ssl_tls.c : 2391 - ssl->f_recv(_timeout)() returned 26 (-0xffffffe6)
ssl_tls.c : 2403 - <= fetch input
ssl_tls.c : 1576 - => decrypt buf
ssl_tls.c : 2051 - <= decrypt buf
ssl_tls.c : 3961 - **got an alert message, type: [1:0]**
ssl_tls.c : 3976 - **is a close notify message**

正如我所读到的,“收到一条警报消息,输入:[1:0]”表示 AWS 关闭了连接,但为什么以及这意味着什么?

我在 Wireshark 中看到了“应用程序数据”条目。所以可能我在应用程序数据事务的中间收到了 AWS 关闭警报。

我还看到类似“这意味着证书对 AWS 来说不够宽松”的评论,但我在 Linux 和嵌入式端都使用相同的证书。

任何想法。我该如何调试它?

【问题讨论】:

    标签: amazon-web-services ssl aws-iot


    【解决方案1】:

    我建议您三重检查您的政策(和证书以及它们与您的东西之间的链接)。 我遇到了同样的问题,解决方案是从以下位置更改政策:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "iot :*",
          "Resource": "*"
        }
      ]
    }
    

    到:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "iot:*",
          "Resource": "*"
        }
      ]
    }
    

    即:“Action”字符串丢失了空格字符。

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2020-05-07
      • 2020-12-01
      • 2020-08-17
      • 2018-12-19
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 2019-05-09
      相关资源
      最近更新 更多