Mosquitto访问控制列表(ACL)失效问题求助
问题分析与解决
核心原因
你配置了use_identity_as_username true,这意味着Mosquitto会使用客户端SSL证书中的CN(通用名称)作为用户名,而非密码文件里的“test”。而你的ACL文件只授权了用户“test”,两者不匹配,导致客户端被拒绝访问主题,收不到消息。
解决步骤
1. 确认客户端证书的CN字段
查看你的客户端证书,确认其CN(通用名称)是什么。可以用openssl命令查看:
openssl x509 -in client.crt -text -noout | findstr "Subject:"
输出里的CN=后面的值就是Mosquitto实际使用的用户名。
2. 调整ACL文件
- 如果证书CN是“test”,检查ACL文件格式是否正确(确保
user test和topic #是单独两行,无多余空格); - 如果证书CN不是“test”,把ACL里的
user test改成证书的CN值,比如证书CN是“client01”,则ACL改为:user client01 topic #
3. 验证配置
修改完成后,重启Mosquitto服务,再用客户端测试订阅和接收消息。
4. 排查日志(可选)
如果问题仍存在,在Mosquitto配置中添加log_type all开启全量日志,查看是否有“ACL deny”类的日志条目,进一步确认用户名与权限的匹配情况。
内容的提问来源于stack exchange,提问作者bluscape
相关产品推荐
相关产品推荐

