【问题标题】:IoT can't connect to the server with MQTT+TLSIoT 无法使用 MQTT+TLS 连接到服务器
【发布时间】:2016-08-02 06:28:06
【问题描述】:

我使用 MQTT+tls 将 IoT 设备连接到具有 SIM900 支持的 GPRS 的服务器。

物联网设备在 HTTP 或 HTTPs 上连接到服务器没有任何问题。

但是,当我用Tomcat在服务器上设置ssl代理时,物联网设备可以成功获得“send ok”状态,但总是出现“wait send ok ack timeout”错误。

安装在服务器上的wireshark无法捕获任何有用的信息。

【问题讨论】:

  • 您不能将 HTTPS 代理与原始 MQT 一起使用。您是否在 websockets 上使用 MQTT?
  • “安装在服务器上的wireshark无法捕获任何有用的信息”——我认为线索必须来自传输层。要寻找的东西是 1. 您的 MQTT 客户端可以忽略服务器证书验证问题 2. 是否在做双向 SSL?在那种情况下,服务器是否正确识别您的客户端? 3. 有时密码不匹配导致握手错误。在所有这些情况下,您都可以依赖 TCP 转储
  • 服务器通过 CertificateRequest 请求客户端证书。我可以禁用此请求以使服务器不需要客户端证书吗?
  • MQTT 客户端将设法与 tomcat 进行 SSL 握手,但由于您无法通过 HTTP 代理代理 MQTT,因此无法进一步

标签: ssl mqtt iot


【解决方案1】:

在 SIM900 上,您不能使用 TCP+SSL。这就是为什么您可以使用 HTTPS 来做到这一点,但不能使用 MQTT+SSL 来做到这一点。您可以使用没有 SSL 的 MQTT 协议。

为了在 SIM900 上实现此功能(MQTT+SSL),我所做的是使用 wolfSSL 加密数据,然后通过 TCP 发送数据,无需 SSL 连接。

【讨论】: