[我正在开发需要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数据包。
我该如何处理此问题?
回答我自己的问题。从mosquitto信息库的net_mosq.c
中读取了this commit后,发现必须再包含一个参数:SSL_OP_NO_TLSv1_3
在构建时,构建命令将是:
make WITH_DOCS=no CPPFLAGS="-DSSL_OP_NO_TLSv1_3"
sudo make install WITH_DOCS=no
然后使用相同的命令mosquitto
,mosquitto_pub
(在我的上一篇文章中详细介绍)再次启动mosquitto MQTT经纪人和发布者,现在可以正常使用。