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 mosquitto
,mosquitto_pub
(详细信息在我上面的 post 中),现在它运行良好。
我正在开发一个需要 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 mosquitto
,mosquitto_pub
(详细信息在我上面的 post 中),现在它运行良好。