帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)
发布时间:2024-03-11 09:31:49   分类:帮助文档
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


最好从阿里云或者腾讯云、华为云生成域名证书。证书下载可以下载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

把从阿里云上下载的证书拖入其中 然后修改配置文件,设置证书路径
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了,必须使用域名!!!
老版本

新版本

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


2. 新版本配置(emqx4.0+版本)
新版本如果要配置http接口鉴权登录无需这么复杂的配置 只需要在控制台页面上配置即可 打开新版本控制台,访问菜单【访问控制】》【认证】》点击创建按钮》选择Http服务》 设置参数如下 因为我的鉴权需要获取clientid,默认的接口入参只有username和password所以这里我们修改下入参
{
"clientid": "${clientid}",
"password": "${password}",
"username": "${username}"
}

这样接口鉴权就大功告成了!
12 emqx允许订阅上下线主题
设置allow所有用户订阅$SYS/brokers/+/clients/#主题 vim etc/acl.conf
{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}.





香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价