能否通过配置实现Mosquitto MQTT代理的三类客户端授权校验?
Mosquitto配置实现三类授权校验的可行性
不用修改Mosquitto核心代码,仅通过配置搭配官方/第三方扩展插件就能实现这三类授权校验,具体方案如下:
1. 校验客户端证书SAN包含请求的clientID
Mosquitto本身支持TLS客户端证书认证,但默认无法直接关联SAN与clientID。借助mosquitto-auth-plug(Mosquitto官方推荐的认证/授权扩展插件),可通过自定义脚本实现校验:
- 启用插件并配置证书认证模式,让插件提取客户端证书的SAN字段;
- 在插件的认证脚本中,将提取到的SAN列表与客户端提交的clientID做比对,仅当clientID存在于SAN中时,允许连接。
2. 客户端仅能订阅包含自身clientID的主题
直接通过Mosquitto的ACL(访问控制列表)配置即可实现:
- 在
mosquitto.conf中开启ACL:acl_file /path/to/acl.conf; - 在ACL文件中使用
%c变量(代表当前客户端的clientID)编写规则:
这条规则限制客户端仅能读写以自身clientID为前缀的主题路径。若需更精细控制,还可结合用户名(若启用证书映射用户名)设置针对性规则。topic readwrite client/%c/#
3. 仅已知clientID可订阅通配符主题
通过ACL的黑白名单机制实现:
- 先在ACL文件中添加默认禁止规则,拦截所有通配符订阅请求:
topic deny # - 再针对允许的clientID单独授予通配符订阅权限:
也可结合mosquitto-auth-plug插件,通过脚本读取预定义的可信clientID列表,在授权阶段动态判断是否允许通配符订阅。clientid trusted_client_01 topic read # clientid trusted_client_02 topic read #
内容的提问来源于stack exchange,提问作者Siddharth Trikha
相关产品推荐
相关产品推荐

