前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EMQX MQTT 服务器(下篇)| 开启客户端身份安全认证并使用mqtt.fx测试

EMQX MQTT 服务器(下篇)| 开启客户端身份安全认证并使用mqtt.fx测试

作者头像
Mculover666
发布2020-07-16 12:02:29
15.7K0
发布2020-07-16 12:02:29
举报
文章被收录于专栏:TencentOS-tinyTencentOS-tiny

0. 准备工作

  • EMQ-X 服务器版本说明

经过实际测试,EMQ X 版本高于 3.0.1 版本无法配置使用插件,所以在进行本节实验之前,先删除原有的 EMQ-X,下载安装 3.0.1 版本

  • mqtt.fx 工具

使用方法参考:mqtt.fx | 一款超级好用的 Mqtt 客户端软件(下载、安装、使用详解)

1. EMQ-X 的认证访问控制

EMQ X 消息服务器的连接认证和访问控制由一系列的认证插件(Plugins)提供,他们的命名都符合 emqxauth的规则,在 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[2] 提供了 ClientID 认证功能,目前只支持连接认证,通过 clientid 和 password 认证客户端,此插件在存储密码时会按照配置的 hash 算法将明文加密后存入。

停止 EMQ-X 服务

在配置插件之前首先停止服务:

代码语言:javascript
复制
cd emqx
./bin/emqx stop

配置 ClientID 插件

登录部署了 EMQ-X 的服务器,编辑 EMQ-X 目录下的这个文件:

代码语言:javascript
复制
vim ./etc/plugins/emqx_auth_clientid.conf

修改官方示例,配置一个 id 和密码,并将加密方式改为 plain(方便起见,直接文本传输):

启动 EMQ-X 服务

代码语言:javascript
复制
./bin/emqx start

开启 ClientID 插件

开启插件的方式有两种:

  • 直接在命令行启动:
代码语言:javascript
复制
./bin/emqx_ctl plugins load emqx_auth_clientid
  • 在 DashBoard 中启动:

在 DashBoard 的左侧点击“插件”一栏,找到 emqx_auth_clientid 插件,点击开启(这里我已经命令行开启,所以显示停止):

客户端登录测试

因为 mqtt.fx 不能设置 clinet id 密码,所以暂不测试。

4. Username 认证插件

emqx_auth_username[3] 提供了 Username 认证功能,目前只支持连接认证,通过 username 和 password 认证客户端,此插件在存储密码时会按照配置的 hash 算法将明文加密后存入。

停止 EMQ-X 服务

在配置插件之前首先停止服务:

代码语言:javascript
复制
cd emqx
./bin/emqx stop

配置 Username 插件

登录部署了 EMQ-X 的服务器,编辑 EMQ-X 目录下的这个文件:

代码语言:javascript
复制
cd emqx/
vim ./etc/plugins/emqx_auth_username.conf

修改官方示例,配置一个 username 和密码,并将加密方式改为 plain(方便起见,直接文本传输):

启动 EMQ-X 服务

代码语言:javascript
复制
./bin/emqx start

开启 Username 插件

开启插件的方式有两种:

  • 直接在命令行启动:
代码语言:javascript
复制
./bin/emqx_ctl plugins load emqx_auth_username
  • 在 DashBoard 中启动:

在 DashBoard 的左侧点击“插件”一栏,找到 emqx_auth_clientid 插件,点击开启(这里我已经命令行开启,所以显示停止):

客户端登录测试

点击连接即可成功登陆:

如果对 username 或者密码稍作修改,则不可登录:

测试完毕,这种用户名认证方式非常推荐:

  • 优点:给客户端分配 username 和 password 即可,如果不对应,则不会连接,测试方便;
  • 缺点:每个设备都需要手动或者 API 请求分配认证信息,建立阶段较复杂
  • 推荐指数:★★★★☆

参考资料

[1]mqtt.fx | 一款超级好用的Mqtt客户端软件(下载、安装、使用详解): https://blog.csdn.net/Mculover666/article/details/103799033

[2]emqx_auth_clientid: https://github.com/emqx/emqx-auth-clientid

[3]emqx_auth_username: https://github.com/emqx/emqx-auth-username

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Mculover666 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 准备工作
  • 1. EMQ-X 的认证访问控制
  • 2. 默认方式——匿名认证
  • 3. ClientID 认证
    • 停止 EMQ-X 服务
      • 配置 ClientID 插件
        • 启动 EMQ-X 服务
          • 开启 ClientID 插件
            • 客户端登录测试
            • 4. Username 认证插件
              • 停止 EMQ-X 服务
                • 配置 Username 插件
                  • 启动 EMQ-X 服务
                    • 开启 Username 插件
                      • 客户端登录测试
                        • 参考资料
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档