mosquitto_pub 在构建时启用 TLS v1.3 时出现运行时错误

runtime error on mosquitto_pub with TLS v1.3 enabled at build time

我正在开发一个需要 TLS v1.3 和 MQTT v5.0 的应用程序,作为我工作的一部分,我必须在不同物理主机的 Debian 系统上构建 mosquitto MQTT 代理和订阅者。

从 mosquitto Github 存储库,我设法构建了 mosquitto 库 (v1.6.7) 和二进制工具(其 README.md 描述了在构建时默认启用 TLS):

make WITH_DOCS=no
make install  WITH_DOCS=no

我还设置了 CA 证书/服务器证书(用于 MQTT 代理),并修改了 mosquitto.conf (learn from here)。当我尝试向我的 MQTT 代理发布消息时,出现以下错误:

mosquitto_pub -d --tls-version  tlsv1.3   --cafile  ./ca.crt  -i rpi3peer -V mqttv5  -h 123.45.6.78  -p 8883  -u MY_BROKER_NAME  -P BROKER_PASSWD  -t "topic/placed/here"  -m "put some messsage"

> Error: Protocol tlsv1.3 not supported

在 MQTT 代理上,它只是在 TCP 级别建立一个新连接,然后立即关闭,我还使用 Wireshark 在代理和客户端之间捕获了一些数据包,但是没有来自那里的 TLS v1.3 数据包。

我该如何处理这个问题?

回答我自己的问题。从 this commit 的 mosquitto 存储库中读取 net_mosq.c 后,发现在构建时还必须包含一个参数:SSL_OP_NO_TLSv1_3,构建命令将是:

make WITH_DOCS=no  CPPFLAGS="-DSSL_OP_NO_TLSv1_3"

sudo make install  WITH_DOCS=no

然后使用相同的命令再次启动 mosquitto MQTT broker & publisher mosquittomosquitto_pub(详细信息在我上面的 post 中),现在它运行良好。