如何验证Mosquitto的MQTT连接是否采用TLS加密?
验证MQTT连接是否使用TLS加密的方法
问题背景
服务器运行Ubuntu 22.04,客户端为MacOS,已配置Mosquitto的8883端口启用TLS并要求身份验证,通过MQTT Explorer可成功连接,但需确认该连接未因握手错误退化为未加密状态。
验证方法
1. 查看Mosquitto详细调试日志
修改Mosquitto配置文件/etc/mosquitto/mosquitto.conf,添加或调整日志级别:
log_type all
重启Mosquitto服务:
sudo systemctl restart mosquitto
重新用MQTT Explorer连接后,查看/var/log/mosquitto/mosquitto.log,若存在类似以下日志,说明TLS握手成功:
1680357916: New connection from 2.3.4.5:61585 on port 8883. 1680357916: TLS handshake started from 2.3.4.5:61585 1680357917: TLS handshake successful from 2.3.4.5:61585 1680357917: New client connected from 2.3.4.5:61585 as mqtt-explorer-e65374de (p2, c1, k60, u'user').
2. 服务器端抓包分析
在服务器终端执行tcpdump命令抓取8883端口的流量:
sudo tcpdump -i any port 8883 -A
保持命令运行,用客户端发起连接。如果是TLS加密连接,抓包内容会是不可读的乱码;若存在明文的CONNECT、USERNAME等MQTT协议字段,说明连接未加密。
3. Mac客户端用openssl测试TLS连接
在Mac终端执行以下命令,直接与服务器8883端口建立TLS连接:
openssl s_client -connect example.com:8883
若连接成功,终端会输出完整的TLS握手信息,包括证书颁发机构、加密套件、会话状态等内容,证明TLS连接正常;若握手失败或无TLS相关输出,说明连接未使用加密。
4. 强制TLS连接验证
临时修改Mosquitto配置,关闭1883未加密端口(注释或删除listener 1883行),重启服务后,用MQTT Explorer尝试不启用TLS选项连接8883端口。若连接失败,说明8883端口仅接受TLS加密连接,当前正常连接必然是加密状态。
内容的提问来源于stack exchange,提问作者pkkrusty
相关产品推荐
相关产品推荐

