EMQX MQTT 服务器(下篇)| 开启客户端身份安全认证并使用mqtt.fx测试
0. 准备工作
- EMQ-X服务器版本说明
经过实际测试,EMQ X 版本高于3.0.1版本无法配置使用插件,所以在进行本节实验之前,先删除原有的EMQ-X,下载安装3.0.1版本。
- mqtt.fx工具
使用方法参考:mqtt.fx | 一款超级好用的Mqtt客户端软件(下载、安装、使用详解)。
1. EMQ-X的认证访问控制
EMQ X 消息服务器的连接认证和访问控制由一系列的认证插件(Plugins)提供,他们的命名都符合 emqx_auth_ 的规则,在 EMQ X 中,这两个功能分别是指:
- 连接认证: EMQ X 校验每个连接上的客户端是否具有接入系统的权限,若没有则会断开该连接;
- 访问控制: EMQ X 校验客户端每个 发布(Publish)/订阅(Subscribe) 的权限,以 允许/拒绝 相应操作;
本文只讲述如何配置插件进行连接认证。
EMQ X 消息服务器认证的插件支持按用户名密码、ClientID 或匿名认证三种方式,系统默认开启匿名认证,我们可以配置插件开启认证链:
特别需要注意:
- 当开启Username认证之后,系统会忽略Client ID认证和匿名认证;
- 当开启Client ID认证之后,系统会忽略匿名认证;
2. 默认方式——匿名认证
搭建完成之后,设备端对接MQTT服务器没有任何的身份认证,直接连接即可。
这里我使用mqtt.fx作为mqtt客户端进行测试:
设置完成之后点击连接即可:
注意没有任何的验证信息,client id是随机生成的,只是为了确保系统中不重复即可!
测试订阅主题:
测试发布消息:
发布之后看一下是否收到(客户端已订阅此主题):
测试成功,再登入EMQ X的后台控制面板,在“连接”一栏查询是否有连接记录:
在“主题”一栏可以看到发布和订阅过的主题:
在“订阅”一栏可以看到当前所有先服务器订阅消息的客户端:
测试完毕,这种无认证方式的优缺点非常明显:
- 优点:客户端对接简单,利于编程;
- 缺点:毫无安全性可言,任何设备都可以连接并且发布消息,容易遭受攻击;
- 推荐指数:★☆☆☆☆(仅限学习测试时使用)
3. ClientID 认证
EMQ-X提供了很多有用的插件,并且插件也是开源的。
其中 emqx_auth_clientid 提供了 ClientID 认证功能,目前只支持连接认证,通过 clientid 和 password 认证客户端,此插件在存储密码时会按照配置的 hash 算法将明文加密后存入。
停止EMQ-X服务
在配置插件之前首先停止服务:
cd emqx
./bin/emqx stop
配置ClientID插件
登录部署了EMQ-X的服务器,编辑EMQ-X目录下的这个文件:
vim ./etc/plugins/emqx_auth_clientid.conf
修改官方示例,配置一个id和密码,并将加密方式改为plain(方便起见,直接文本传输):
启动EMQ-X服务
./bin/emqx start
开启ClientID插件
开启插件的方式有两种:
- 直接在命令行启动:
./bin/emqx_ctl plugins load emqx_auth_clientid
- 在DashBoard中启动:
在DashBoard的左侧点击“插件”一栏,找到 emqx_auth_clientid 插件,点击开启(这里我已经命令行开启,所以显示停止):
客户端登录测试
因为mqtt.fx不能设置clinet id 密码,所以暂不测试。
4. Username 认证插件
emqx_auth_username 提供了Username 认证功能,目前只支持连接认证,通过 username 和 password 认证客户端,此插件在存储密码时会按照配置的 hash 算法将明文加密后存入。
停止EMQ-X服务
在配置插件之前首先停止服务:
cd emqx
./bin/emqx stop
配置Username插件
登录部署了EMQ-X的服务器,编辑EMQ-X目录下的这个文件:
cd emqx/
vim ./etc/plugins/emqx_auth_username.conf
修改官方示例,配置一个username和密码,并将加密方式改为plain(方便起见,直接文本传输):
启动EMQ-X服务
./bin/emqx start
开启Username插件
开启插件的方式有两种:
- 直接在命令行启动:
./bin/emqx_ctl plugins load emqx_auth_username
- 在DashBoard中启动:
在DashBoard的左侧点击“插件”一栏,找到 emqx_auth_clientid 插件,点击开启(这里我已经命令行开启,所以显示停止):
客户端登录测试
点击连接即可成功登陆:
如果对username或者密码稍作修改,则不可登录:
测试完毕,这种用户名认证方式非常推荐:
- 优点:给客户端分配 username 和 password 即可,如果不对应,则不会连接,测试方便;
- 缺点:每个设备都需要手动或者 API 请求分配认证信息,建立阶段较复杂
- 推荐指数:★★★★☆