EMQ X中MQTT连接认证怎么配置

发布时间:2021-12-07 09:15:05 作者:iii
来源:亿速云 阅读:521
# EMQ X中MQTT连接认证怎么配置

## 概述

MQTT协议作为物联网领域最主流的通信协议之一,其安全性配置尤为重要。EMQ X作为高性能的MQTT消息服务器,提供了完善的连接认证机制。本文将详细介绍EMQ X中MQTT连接认证的配置方法,涵盖基础认证、增强认证以及自定义认证等多个方面。

## 目录

1. [认证机制简介](#认证机制简介)
2. [基础认证配置](#基础认证配置)
   - [匿名认证](#匿名认证)
   - [用户名密码认证](#用户名密码认证)
3. [增强认证方式](#增强认证方式)
   - [JWT认证](#jwt认证)
   - [HTTP认证](#http认证)
4. [数据库认证集成](#数据库认证集成)
   - [MySQL认证](#mysql认证)
   - [PostgreSQL认证](#postgresql认证)
   - [Redis认证](#redis认证)
5. [LDAP认证配置](#ldap认证配置)
6. [自定义认证插件](#自定义认证插件)
7. [多认证链配置](#多认证链配置)
8. [认证性能优化](#认证性能优化)
9. [常见问题排查](#常见问题排查)
10. [安全最佳实践](#安全最佳实践)

## 认证机制简介

EMQ X支持多种认证方式,主要包括:

- **基础认证**:匿名访问、用户名/密码认证
- **数据库认证**:MySQL、PostgreSQL、Redis等
- **外部服务认证**:HTTP API、JWT、LDAP
- **自定义认证**:通过插件扩展

认证流程分为两个阶段:
1. 客户端连接时的认证
2. 发布/订阅时的ACL验证(本文主要关注连接认证)

## 基础认证配置

### 匿名认证

默认配置(不推荐生产环境使用):

```bash
# etc/emqx.conf
allow_anonymous = true

禁用匿名访问:

allow_anonymous = false

用户名密码认证

内置认证(用户名密码存储在EMQ X内置数据库中):

# etc/plugins/emqx_auth_mnesia.conf
auth.mnesia.password_hash = sha256

通过CLI添加用户:

./bin/emqx_ctl users add username password

增强认证方式

JWT认证

配置JWT认证(需启用emqx_auth_jwt插件):

# etc/plugins/emqx_auth_jwt.conf
auth.jwt.secret = your_secret_key
auth.jwt.from = password  # 从password字段获取token
auth.jwt.verify_claims = on
auth.jwt.verify_claims.username = %u

HTTP认证

配置HTTP认证服务:

# etc/plugins/emqx_auth_http.conf
auth.http.auth_req = http://127.0.0.1:8080/mqtt/auth
auth.http.auth_req.method = post
auth.http.auth_req.params = clientid=%c,username=%u,password=%P

HTTP服务需返回: - 200 OK表示认证成功 - 4xx表示认证失败

数据库认证集成

MySQL认证

配置示例:

# etc/plugins/emqx_auth_mysql.conf
auth.mysql.server = 127.0.0.1:3306
auth.mysql.username = emqx
auth.mysql.password = public
auth.mysql.database = mqtt
auth.mysql.password_hash = sha256

auth.mysql.auth_query = SELECT password FROM mqtt_user WHERE username = '%u' LIMIT 1

PostgreSQL认证

配置示例:

# etc/plugins/emqx_auth_pgsql.conf
auth.pgsql.server = 127.0.0.1:5432
auth.pgsql.username = postgres
auth.pgsql.password = public
auth.pgsql.database = mqtt
auth.pgsql.password_hash = sha256

auth.pgsql.auth_query = SELECT password FROM mqtt_user WHERE username = '%u' LIMIT 1

Redis认证

配置示例:

# etc/plugins/emqx_auth_redis.conf
auth.redis.server = 127.0.0.1:6379
auth.redis.password = 
auth.redis.database = 0
auth.redis.password_hash = sha256

auth.redis.auth_cmd = HMGET mqtt_user:%u password

LDAP认证配置

配置LDAP认证:

# etc/plugins/emqx_auth_ldap.conf
auth.ldap.servers = 192.168.0.1
auth.ldap.port = 389
auth.ldap.username_dn = cn=%u,ou=users,dc=emqx,dc=io
auth.ldap.password_hash = sha256
auth.ldap.filter = (&(objectClass=inetOrgPerson)(uid=%u))

自定义认证插件

开发自定义认证插件步骤:

  1. 创建插件模板:

    ./bin/emqx_ctl plugins gen my_auth
    
  2. 实现emqx_auth_plugin行为: “`erlang -module(my_auth_plugin). -behavior(emqx_auth_plugin).

-export([init/1, check/3, description/0]).

init(Opts) -> {ok, Opts}.

check(ClientInfo = #{username := Username}, Password, _Opts) -> case my_auth_service:check(Username, Password) of ok -> ok; {error, Reason} -> {error, Reason} end.


3. 打包并加载插件

## 多认证链配置

EMQ X支持配置多个认证链:

```bash
# etc/emqx.conf
auth.chain = http,jwt,mysql

认证将按顺序尝试,直到某个认证器返回成功。

认证性能优化

  1. 缓存配置

    auth.mysql.query_timeout = 5s
    auth.mysql.auth_cache.enable = true
    auth.mysql.auth_cache.expire_time = 10m
    
  2. 连接池配置

    auth.mysql.pool = 8
    auth.mysql.pool_size = 16
    
  3. 密码哈希优化

    auth.mysql.password_hash = sha256
    auth.mysql.password_hash_rounds = 10
    

常见问题排查

  1. 认证失败

    • 检查认证插件是否启用
    • 查看日志./log/emqx.log
    • 使用CLI测试认证:./bin/emqx_ctl auth_usr check <username> <password>
  2. 性能问题

    • 启用认证缓存
    • 增加数据库连接池大小
    • 考虑使用Redis等高性能存储
  3. 配置不生效

    • 检查配置文件路径是否正确
    • 执行./bin/emqx_ctl reload重载配置

安全最佳实践

  1. 始终禁用匿名访问
  2. 使用强密码策略
  3. 定期轮换JWT密钥
  4. 为数据库认证启用TLS加密
  5. 限制认证服务的访问IP
  6. 监控认证失败日志

结语

EMQ X提供了灵活强大的认证机制,可以满足从简单到复杂的各种物联网安全需求。通过合理配置认证方式,结合性能优化措施,可以在保证安全性的同时维持系统的高性能。建议根据实际业务场景选择最适合的认证方案,并定期进行安全审计。

注意:本文基于EMQ X 5.0版本编写,不同版本配置可能略有差异,请以官方文档为准。 “`

本文共计约4150字,详细介绍了EMQ X中MQTT连接认证的各种配置方法和最佳实践。内容涵盖基础配置、高级集成、性能优化和故障排查等方面,可作为EMQ X管理员的安全配置参考指南。

推荐阅读:
  1. EMQ X Cloud - MQTT 5.0 公有云服务正式发布
  2. MQTT和CoAP在EMQ X里怎么实现连接

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

emq x mqtt

上一篇:Perl的Web框架Mojolicious 2.0有什么功能

下一篇:Hyperledger fabric Chaincode开发的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》