Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)

这篇具有很好参考价值的文章主要介绍了Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

EMQX 是一款大规模可弹性伸缩的云原生分布式物联网 MQTT 消息服务器。

1 端口介绍

  • 1883:MQTT 协议端口
  • 8084:MQTT/SSL 端口
  • 8083:MQTT/WebSocket 端口
  • 8080:HTTP API 端口
  • 18083:Dashboard 管理控制台端口

2 拉取镜像

docker pull emqx/emqx:latest
# 也可以拉去指定版本
docker pull emqx/emqx:v4.0.0

3 启动临时容器

其他小知识

选项 选项简写 说明
–detach -d 在后台运行容器,并且打印容器id。
–interactive -i 即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用。
–tty -t 分配一个伪tty,一般与 -i 连用。
docker run -dit --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:latest

# 避免跟rabbitmq的1883冲突
docker run -dit --name emqx -p 1884:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:latest

4 拷贝配置文件

拷贝配置文件到宿主机,这样修改宿主机的配置文件之后只需要重启容器,配置文件就会生效。左边是容器的路径,右边是要映射宿主机路径。

把配置文件拷贝出来就是为了之后的ssl证书配置。便于管理。

docker cp emqx:/opt/emqx/etc /home/egn/emqx/etc

5 删除临时容器

docker rm -f emqx

6 重新启动容器

在挂载之前要记得先创建需要挂载的文件夹

挂载全路径

docker run -d \
--name emqx \
-p 1883:1883 \
-p 8883:8883 \
-p 8083:8083 \
-p 8084:8084 \
-p 8081:8081 \
-p 18083:18083 \
-v /usr/local/emqx/etc:/opt/emqx/etc \
-v /usr/local/emqx/lib:/opt/emqx/lib \
-v /usr/local/emqx/data:/opt/emqx/data \
-v /usr/local/emqx/log:/opt/emqx/log \
emqx/emqx:latest

这里只需要映射出来etc目录,用于ssl的配置

docker run -dit \
--name emqx \
-p 1883:1883 \
-p 8883:8883 \
-p 8083:8083 \
-p 8084:8084 \
-p 8081:8081 \
-p 18083:18083 \
-v /home/egn/emqx/etc:/opt/emqx/etc \
emqx/emqx:latest

7 访问测试

访问http://127.0.0.1:18083

默认密码为admin/public

如果要修改密码

//修改文件,再启动容器
vim /usr/local/emqx/etc/plugins/emqx_auth_username.conf

8 放入证书文件

通过自制证书或者去阿里云签发免费的证书下载下来,获得

bash脚本自动生成证书

#/bin/sh
rm -f ca.*
rm -f emqx.*
rm -f client.*
# 生成自签名的CA key和证书
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.pem -subj "/C=CN/ST=Jiangsu/L=Suzhou/O=XXX/CN=SelfCA"
#openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.pem
 
# 生成服务器端的key和证书
openssl genrsa -out emqx.key 2048
openssl req -new -key ./emqx.key -config openssl.cnf -out emqx.csr
openssl x509 -req -in ./emqx.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out emqx.pem -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf
 
 
# 生成客户端key和证书
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=Jiangsu/L=Suzhou/O=XXX/CN=client"
openssl x509 -req -days 3650 -in client.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out client.pem

Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)

最好从阿里云或者腾讯云、华为云生成域名证书。证书下载可以下载nginx、tomcat……。这里我们下载其他类证书。

老版本配置ssl证书emqx3.0版本

listener.wss.external.keyfile = etc/certs/my/test.com.key
listener.wss.external.certfile = etc/certs/my/test.com.pem

新版本配置ssl证书
新建证书文件夹

cd /home/egn/emqx/etc/certs
mkdir my

把从阿里云上下载的证书拖入其中
Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)
然后修改配置文件,设置证书路径

vim /home/egn/emqx/etc/emqx.conf

修改配置文件

listeners.wss.default {
  bind = "0.0.0.0:8084"
  max_connections = 512000
  websocket.mqtt_path = "/mqtt"
  ssl_options {
    keyfile = "etc/certs/my/iot.xxxx.cn.key"
    certfile = "etc/certs/my/iot.xxxx.cn.pem"
    cacertfile = "etc/certs/cacert.pem"
  }
}

重启容器

docker restart emqx

9 测试

这里要注意配置了ssl证书后,要想使用ssl连接wss就不能使用ip访问wss了,必须使用域名!!!

老版本

Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)

新版本

Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)

10 添加微信小程序支持

有的mqttjs没有输入端口号的地方,所以这里在nginx添加如下转发。通过https://域名/mqtt一样可以连接

```
    location = /mqtt {
        # 8083就是我们的emq的websocket的端口号
        proxy_pass http://域名:8083;
        proxy_redirect off;
        proxy_set_header Host 域名:8083;

        proxy_set_header Sec-WebSocket-Protocol mqtt;
        
        # 这个是与你的 js客户端的库有关系,本博文的不需要,为了兼顾以后小伙伴,我这里注释了下! 
        #more_clear_headers Sec-WebSocket-Protocol;

        # 这些都是 websocket必须要配置的
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        }

```

11 emqx添加http登录鉴权认证

如果我们想要自己的mq服务器不是所有人都能连接的,就需要对连接做鉴权,这里我们使用http接口对所有接入emqx的客户端进行登录鉴权。
配套的springboot接口下一章见

1. 老版本配置(emqx3.0版本)

需要打开控制控制台ip:18083
打开【插件】菜单,开启emqx_auth_http 的开关
同时需要进入配置文件目录

cd /home/egn/emqx/etc/plugins
vim emqx_auth_http.conf 

配置文件做如下修改

auth.http.auth_req.url = http://xx.xx.xx.xx:8002/emqapi/auth
auth.http.auth_req.method = post
auth.http.auth_req.headers.content_type = application/x-www-form-urlencoded
auth.http.auth_req.params = clientid=%c,username=%u,password=%P
auth.http.super_req.url = http://xx.xx.xx.xx:8002/emqapi/superuser
auth.http.super_req.method = post
auth.http.super_req.headers.content-type = application/x-www-form-urlencoded
auth.http.super_req.params = clientid=%c,username=%u
auth.http.acl_req.url = http://xx.xx.xx.xx:8002/emqapi/acl
auth.http.acl_req.headers.content-type = application/x-www-form-urlencoded
auth.http.acl_req.params = access=%A,username=%u,clientid=%c,ipaddr=%a,topic=%t,mountpoint=%m

Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)

2. 新版本配置(emqx4.0+版本)

新版本如果要配置http接口鉴权登录无需这么复杂的配置
只需要在控制台页面上配置即可
打开新版本控制台,访问菜单【访问控制】》【认证】》点击创建按钮》选择Http服务》
Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)
设置参数如下
Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)
因为我的鉴权需要获取clientid,默认的接口入参只有username和password所以这里我们修改下入参

{
  "clientid": "${clientid}",
  "password": "${password}",
  "username": "${username}"
}

Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)
这样接口鉴权就大功告成了!

12 emqx允许订阅上下线主题

设置allow所有用户订阅$SYS/brokers/+/clients/#主题
vim etc/acl.conf文章来源地址https://www.toymoban.com/news/detail-415333.html

{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.

{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.

{allow, all, subscribe, ["$SYS/brokers/+/clients/#"]}.

{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.

{allow, all}.

到了这里,关于Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • EMQX开启MongoDB接入认证与订阅发布鉴权

    关于物联网平台设计一个最佳实践是: 对接入平台的设备进行认证,并且对设备可以发布和订阅的主题进行权限控制 。 MQTT Broker 开启对接入设备的认证与订阅发布鉴权的意义在于增强系统的安全性。通过认证,可以确保只有经过授权的设备可以连接到Broker,从而防止未经授

    2024年02月03日
    浏览(57)
  • SpringBoot配置SSL证书,开启HTTPS安全访问!!!

    一、前言 二、SpringBoot中配置SSL 1、环境 2、客户端单向认证服务端代码实战-PFX格式的证书 3、HTTP 转HTTPS 通过HTTP协议传输数据,并不会对数据进行加密,所以存在着一定的风险,容易被抓包破解数据,而且现在各种浏览器对使用HTTP协议的网站也会提示不安全。通过将HTTP协议

    2024年02月11日
    浏览(39)
  • node搭建本地https和wss服务(SSL证书安全)

    浏览器输入:https:xxxxx:端口 访问成功  可以在这个网站websocket/ws/wss在线调试测试工具 发送消息 看服务端  参考:node搭建本地https和wss服务(SSL证书安全)_node ssl_jixhua的博客-CSDN博客 Node.js网络编程之WebSocket篇_node websocket_夜已如歌_ok的博客-CSDN博客

    2024年02月13日
    浏览(33)
  • mac制作ssl证书|生成自签名证书,nodejs+express在mac上搭建https+wss(websocket)服务器

    mac 自带 openssl 所以没必要像 windows 一样先安装 openssl,直接生成即可 生成 key 让输入两次密码,随便,但是两次得是一样的 移除密码 生成 csr Country Name (2 letter code) [ 国家 ]:CN State or Province Name (full name) [ 省份 ]:Beijing Locality Name (eg, city) [ 城市 ]:Beijing Organization Name (eg, company)

    2024年02月09日
    浏览(37)
  • nginx: 配置https证书,wss证书

    作用:SSL证书卸载 openssl genrsa -des3 -out server.key 2048 openssl req -new -key server.key -out server.csr openssl rsa -in server.key -out server.key openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt 放在指定目录,比如 /usr/local/cert TODO 其他证书制作方式 nginx.conf文件,注意proxy_pass后面的斜杠

    2024年02月04日
    浏览(27)
  • http的ssl证书保姆级配置安装-多域名 免费ssl证书 解析 nginx配置

    摘要:多个域名(mysite.com,*.mysite.com),免费证书,添加解析记录,申请证书的shell脚本,nginx配置 登录免费证书网站:https://freessl.cn/ 输入:mysite.com,*.mysite.com 选择亚洲诚信trustasia 点击“创建免费的ssl证书” ACME域名配置 域名:确认刚才输入的mysite.com,*.mysite.com无误,点击下

    2024年02月09日
    浏览(44)
  • docker中使用nginx配置ssl证书,443端口无法连接

    环境:docker + 云服务器+域名 准备:下载ssl证书文件,安全组开放443端口, nginx容器映射443端口 (切记!!!我就是这里忘记配置, 结果弄了好久); 如果上面操作都做好了,在nginx也配置了,但是还是有问题,那么就是你的nginx没有映射443端口,博主这里就是踩了这个坑,话不多说

    2024年02月07日
    浏览(38)
  • docker中使用nginx配置腾讯云ssl证书,443端口无法连接

    环境:docker + 腾讯云轻量应用服务器+腾讯云域名 准备:首先需要去腾讯云域名下载ssl证书文件,创建安全组开放443端口,服务器防火墙开放443端口; 如果上面操作都做好了,在nginx也配置了,但是还是有问题,那么就是你的nginx没有映射443端口,博主这里就是踩了这个坑,话

    2024年02月11日
    浏览(45)
  • Ubuntu安装nginx到配置ssl证书

    1、命令安装nginx 配置文件默认在 /etc/nginx文件夹下面,可以编辑nginx.conf 或者 sites-enabled文件夹下面的默认配置文件 default 2、常用命令 查看版本号 nginx -v 关闭 nginx -s stop 启动  nginx 重新加载  nginx -s reload 检查配置文件是否有问题  nginx -t 以特定的配置文件启动  nginx -c  文件

    2023年04月22日
    浏览(32)
  • ubuntu apache2 安装和配置安装ssl证书

    在开始安装之前,要确保你以 sudo 权限用户身份登录。 Apache 被包含在默认的 Ubuntu 软件源中。 安装非常直接。在 Ubuntu 和 Debian 系统中,Apache 软件包和服务被称为  apache2 。 运行下面的命令来更新软件包索引,并且安装 Apache: 当安装过程完成,Apache 服务将会被自动启动。

    2023年04月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包