[MQTT]服务器EMQX搭建SSL/TLS连接过程(wss://)

news2024/11/23 1:46:54


👉原文阅读


💡章前提示

本文采用8084端口进行连接,是EMQX 默认提供了四个常用的监听器之一,如果需要添加其他类型的监听器,可参考官方文档🔗管理 | EMQX 文档。

本文使用自签名CA,需要提前在Linux系统上安装🔗OpenSSL,具体安装教程请自行搜索。

本文采用SSL/TLS连接,需要提前在EMQX上启用,可参考🔗开启 SSL/TLS 连接| EMQX 文档


目录

    • 👉[原文阅读](https://b1ankc-mov.github.io/posts/emqx_mqtt_ssl_wss/)
      • 💡章前提示
  • 📘正文开始
    • 使用OpenSSL获取证书
      • CA文件
      • Server文件
        • 🔑小贴士
      • Client文件
    • 登录EMQX平台配置服务器
        • 🚩注意
    • 使用MQTTX客户端测试连接
      • 单向认证的SSL/TLS连接
      • 双向认证的SSL/TLS连接


📘正文开始

使用OpenSSL获取证书

CA文件

  1. 打开Linux系统终端操作窗口,输入以下指令,查看OpenSSL是否安装,如果有,则会显示版本信息。
openssl version
  1. 生成私钥:my_root_ca.key
openssl genrsa -out my_root_ca.key 2048
  1. 使用该密钥生成根(CA)证书:my_root_ca.pem
openssl req -x509 -new -nodes -key my_root_ca.key -sha256 -days 3650 -out my_root_ca.pem

系统会提示以下信息,对应含义如下(根据下面的内容填就可以了,#后面的不需要填):

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: CN # 国家/地区
State or Province Name (full name) [Some-State]:Zhejiang # 省/市
Locality Name (eg, city) []:Hangzhou # 城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:EMQX # 组织机构(或公司名),如 EMQ
Organizational Unit Name (eg, section) []:EMQX # 机构部门,如 EMQX
Common Name (e.g. server FQDN or YOUR name) []:none # 通用名称,此处应当设置为服务器域名如 mqtt.emqx.com
...

Server文件

  1. 生成EMQX(服务器)端的私钥:emqx.key
openssl genrsa -out emqx.key 2048
  1. 使用 vi命令创建配置文件:openssl.cnf
vi openssl.cnf

文件内容如下,BROKER_ADDRESS 修改为 EMQX 服务器实际的 IP 或 DNS 地址

例如:IP.1 = 127.0.0.1,或 DNS.1 = broker.xxx.com(可以只填IP,把域名DNS那一行删掉)

[req]
default_bits  = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
countryName = CN
stateOrProvinceName = Zhejiang
localityName = Hangzhou
organizationName = EMQX
commonName = Server certificate
[req_ext]
subjectAltName = @alt_names
[v3_req]
subjectAltName = @alt_names
[alt_names]
IP.1 = BROKER_ADDRESS
DNS.1 = BROKER_ADDRESS

​ 最后Esc+:wq 保存并退出

  1. 使用上面的密钥和配置文件签发证书请求:emqx.csr
openssl req -new -key ./emqx.key -config openssl.cnf -out emqx.csr
  1. 使用请求文件、CA密钥、配置文件,以根证书签发EMQX实体证书:emqx.pem
openssl x509 -req -in ./emqx.csr -CA my_root_ca.pem -CAkey my_root_ca.key -CAcreateserial -out emqx.pem -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf

🔑小贴士

准备好Server文件(EMQX证书)后,就可以启用EMQX单向认证的SSL/TLS连接功能了

如果需要双向认证客户端证书和客户端Key文件,用来满足配置nginx等需求的,请继续配置Client文件↓


Client文件

这一部分原理和内容跟配置Server文件一样,不赘述了,直接放步骤。

  1. 生成client.key
openssl genrsa -out client.key 2048
  1. 生成client.csr
openssl req -new -key ./client.key -config openssl.cnf -out client.csr
  1. 生成client.pem
openssl x509 -req -in ./client.csr -CA my_root_ca.pem -CAkey my_root_ca.key -CAcreateserial -out client.pem -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf

登录EMQX平台配置服务器

  1. 将前文中通过OpenSSL工具生成的 emqx.pememqx.keymy_root_ca.pem 文件拷贝到 EMQX 的 etc/certs/ 目录下,并参考如下配置修改 emqx.conf
## listener.ssl.$name is the IP address and port that the MQTT/SSL
## Value: IP:Port | Port
listener.ssl.external = 8084

## Path to the file containing the user's private PEM-encoded key.
## Value: File
listener.ssl.external.keyfile = etc/certs/emqx.key

## Path to a file containing the user certificate.
## Value: File
listener.ssl.external.certfile = etc/certs/emqx.pem

## Path to the file containing PEM-encoded CA certificates. The CA certificates
## Value: File
listener.ssl.external.cacertfile = etc/certs/my_root_ca.pem

博主8084端口部分修改之后是这样的↓

emqx配置文件修改后代码参考

  1. 打开 Dashboard,点击管理 -> 监听器进入监听器管理页面

打开8084端口配置界面,重新设置TLS CertTLS KeyCA Cert,分别对应上传emqx.pememqx.keymy_root_ca.pem文件


🚩注意
  • 这里类型两个字下面框里的内容要提前设置成wss要不然SSL/TLS连接没法用

  • 另外SSL版本最好是这样官方文档建议添加的SSL版本

这些章前的参考文档都说明了,这里再提醒一下,其他设置基本默认,出问题回去看官方文档


  1. 重启EMQX服务器
emqx restart

使用MQTTX客户端测试连接

MQTTX官网🔗:MQTTX:全功能 MQTT 客户端工具

官方安装文档🔗:安装 - MQTTX 文档

官方使用文档🔗:MQTT 客户端工具演示 | EMQX 文档

单向认证的SSL/TLS连接

  1. 打开MQTTX客户端,添加连接,填写信息:

    名称随便填,Client ID随机

    服务器地址选择wss://,后面填IP地址,端口8084

    SSL安全按钮关闭

    证书类型选择CA or Self signed certificates,在CA文件处上传根(CA)证书即可,客户端证书和客户端key文件两栏不填

    MQTT版本3.1.1

单向认证连接设置

单向认证连接设置

  1. 点击连接按钮,连接成功

单向认证连接成功

  1. 发送测试消息,发送成功

单向认证测试消息发送成功

  1. 参考官方使用文档的步骤🔗MQTT 客户端工具演示 | EMQX 文档,创建另一个连接作为消息接受客户端(配置与之前相同),添加订阅,在Topic中输入test

    接着在原来的EMQX_SSL_TEST连接重新发送test消息,客户端会收到新消息

单向认证订阅消息测试成功

双向认证的SSL/TLS连接

除了SSL安全按钮启动和填入客户端证书、key文件之外,与单向认证没有什么区别,具体看图:

双向认证连接设置

至此,所有测试连接成功√,你会在EMQX监听器上看见连接数增加。

参考文章链接:

  1. EMQ X MQTT 服务器启用 SSL/TLS 安全连接
  2. 开启 SSL/TLS 连接 | EMQX 文档
  3. 获取 SSL/TLS 证书 | EMQX 文档
  4. MQTT 客户端工具演示 | EMQX 文档
  5. 管理 | EMQX 文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1801195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三次谐波式发电机定子单相接地保护Simulink仿真

在用于接地保护的发电机定子回路的仿真模型的基础上增加三次谐波电动势,得到用于仿真三次谐波式接地保护的发电机定子回路的Simulink仿真模型,如图1所示。 图 1发电机定子回路的Simulink仿真模型 发电机端和中性点侧的三次谐波电压的获取采用如图2所示的方法。 图 2 …

校园生活服务平台的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,用户管理,跑腿管理,文娱活动管理,活动申请管理,备忘录管理 前台账户功能包括:系统首页,个人中心&#xff…

使用wheelnav.js构建酷炫的动态导航菜单

目录 前言 一、WheelNav是什么 1、项目地址 2、关于开源协议 3、相关目录介绍 二、如何使用wheelnav.js 1、新建html页面 2、设置style样式 3、创建展示元素实现动态导航 三、参数即方法介绍 1、参数列表 2、运行方法 3、实际成果 四、总结 前言 用户体验永远是一…

数据结构和算法一轮

前言 本文参考《2025年数据结构考研复习指导(王道论坛组编)》和相关文章,为考试前复习而写。 目录 前言 第一章线性表 1.1顺序表 1.2单链表 1.3循环链表 ​1.4双向链表 第二章栈和队列 2.1栈 2.2共享栈 2.3链栈 2.4队列 2.5循环…

大学生创新与创业搜题软件?推荐7个搜题软件和学习工具 #媒体#知识分享

随着大学课程的增多和知识的不断积累,大学生们常常面临着繁重的作业和复杂的题目。为了解决这一问题,许多大学生搜题软件应运而生。 1.彩虹搜题 这个是公众号 个性化推荐功能,精准满足需求。更高效地获取你想要的答案。 下方附上一些测试的…

项目质量保证措施(Word原件)

一、 质量保障措施 二、 项目质量管理保障措施 (一) 资深的质量经理与质保组 (二) 全程参与的质量经理 (三) 合理的质量控制流程 1. 质量管理规范: 2. 加强协调管理&…

高通CSIPHY combo mode介绍

目录 使用MIPI Switch 使用高通平台CSIPHY的Combo Mode YYYY使用Combo Mode电路图如下: 如何设置combo PHY mode CSIInfo configuration when camera works in normal mode 平台SoC一般都有多个CSIPHY以满足当前手机相机设计多摄的情况,但是一款SoC CSIPHY的个数也是一定…

Nested KVM Hypervisor Support

​​​​​​​Description Nested KVM是指基于虚拟化技术的虚拟机管理系统。 Nested KVM在Intel处理器上,KVM使用Intel的vmx(virtualmachine eXtensions)来提高虚拟机性能,即硬件辅助虚拟化技术。如果一台虚拟机能够和物理机一…

从VS Code源码看清晰代码之美

VS Code的产品做的很优秀,其源码也质量颇高,清晰、整洁、富有美感。 下面是 src\vs\workbench\common\notifications.ts 文件中的两段代码,大家感受一下: get sticky(): boolean {if (this._sticky) {return true; // explicitl…

【开源】课程智能组卷系统 SSM+JSP+MySQL

目录 一、项目介绍 学生模块 老师模块 试卷模块 试题模块 考试模块 二、项目界面 三、核心代码 一、项目介绍 经典老框架SSM打造入门项目《课程智能组卷系统》,可以给管理员们、学生、教师使用,包括学生模块、老师模块、试卷模块、试题模块、考试模块、公告…

深入理解并应用KTT求解约束性极值问题

KT 很简单,口诀记心端,等式求最优,不等式验证——小飞打油 以后每期尝试编一句口诀,帮助大家记忆,可以是打油诗,也可以是类似“奇变偶不变,符号看象限”的口诀,如果编的不好&#xf…

C51学习归纳7 --- LED点阵显示静态图片和动画

今天学习一个非常常用的功能。外面的流动字母的LED大屏大家应该很常见吧。今天!学完这个,你就可以自己设计一个LED大屏了! 一、开发板原理图 首先我们看点阵屏幕的输入信号,有P0_X和DP_X控制。P0_X直接就是芯片的P0输出端口&…

离散数学---树

目录 1.基本概念及其相关运用 2.生成树 3.有向树 4.最优树 5.前缀码 1.基本概念及其相关运用 (1)无向树:连通而且没有回路的无向图就是无向树; 森林就是有多个连通分支,每个连通分支都是树的无连通的无向图&…

【CVE-2024-4577】PHP CGI 远程代码执行漏洞

# 转载 本文出自:【CVE-2024-4577】PHP CGI 远程代码执行漏洞 - 极核GetShell (get-shell.com) # 漏洞描述 PHP 语言在设计时忽略Windows 作业系统内部对字元编码转换的Best-Fit特性,导致未认证的攻击者可透过特定的字元序列绕过旧有CVE-2012-1823的保…

【CSS】opacity 父元素设置透明度影响子元素显示效果解决方案

<div class"father"><div class"children"></div> </div>.father{background:#000000,opacity:0.6 } 给父元素设置透明度时&#xff0c;子元素显示效果会搜到父元素透明度的影响&#xff0c;如下图 解决方法&#xff1a; .fathe…

1867java银证转账系统系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java银证转账系统系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&a…

本地运行feishu-chatgpt项目结合内网穿透实现无公网IP远程访问

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 本文主要介绍如何在飞书中创建chatGPT机器人并且结合内网穿透工具…

【静夜思】小时候的回忆

为什么大家都会对自己童年时期的评价很高&#xff1f;甚至是一些模糊都快到想不起来的记忆&#xff1f; 博主是00后&#xff0c;那时候小学的我非常喜欢看动画片&#xff0c;像经典的喜羊羊、熊出没、胡图图等等&#xff0c;太多了。等上了高中后&#xff0c;博主也成为了一名…

西门子学习笔记10 - MCGS和西门子1200进行通讯设置

1、博图软件的设置 1、修改PLC的ip地址为192.168.1.1 2、打开put&#xff0c;get通讯功能 3、设置通讯变量&#xff0c;可以是M区也可以是DB块的数据 2、MCGSE组态环境设置 1、新建项目&#xff0c;在设备窗口界面进入设备窗口 2、添加设备如下 3、双击进入配置界面 4、添加变…

[office] Excel教学:Excel通配符怎么用? #其他#职场发展

Excel教学&#xff1a;Excel通配符怎么用&#xff1f; 尽管Excel使用了很多年&#xff0c;但很多人都还是忽略了Excel通配符的存在&#xff0c;不知道通配符是什么&#xff0c;不知道如何使用它。今天我就完整地介绍一下通配符&#xff0c;让你彻底地认识通配符。 关于通配符…