[MQTT]服务器EMQX搭建SSL/TLS连接过程(wss://)
👉原文阅读
💡章前提示
本文采用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文件
- 打开Linux系统终端操作窗口,输入以下指令,查看OpenSSL是否安装,如果有,则会显示版本信息。
openssl version
- 生成私钥:
my_root_ca.key
openssl genrsa -out my_root_ca.key 2048
- 使用该密钥生成根(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文件
- 生成EMQX(服务器)端的私钥:
emqx.key
openssl genrsa -out emqx.key 2048
- 使用
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
保存并退出。
- 使用上面的密钥和配置文件签发证书请求:
emqx.csr
openssl req -new -key ./emqx.key -config openssl.cnf -out emqx.csr
- 使用请求文件、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文件一样,不赘述了,直接放步骤。
- 生成client.key
openssl genrsa -out client.key 2048
- 生成client.csr
openssl req -new -key ./client.key -config openssl.cnf -out client.csr
- 生成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平台配置服务器
- 将前文中通过OpenSSL工具生成的
emqx.pem
、emqx.key
及my_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端口部分修改之后是这样的↓
- 打开 Dashboard,点击管理 -> 监听器进入监听器管理页面
打开8084端口配置界面,重新设置TLS Cert,TLS Key和CA Cert,分别对应上传emqx.pem
,emqx.key
,my_root_ca.pem
文件
🚩注意
-
这里类型两个字下面框里的内容要提前设置成wss要不然SSL/TLS连接没法用
-
另外SSL版本最好是这样
这些章前的参考文档都说明了,这里再提醒一下,其他设置基本默认,出问题回去看官方文档
- 重启EMQX服务器
emqx restart
使用MQTTX客户端测试连接
MQTTX官网🔗:MQTTX:全功能 MQTT 客户端工具
官方安装文档🔗:安装 - MQTTX 文档
官方使用文档🔗:MQTT 客户端工具演示 | EMQX 文档
单向认证的SSL/TLS连接
-
打开MQTTX客户端,添加连接,填写信息:
名称随便填,Client ID随机
服务器地址选择wss://,后面填IP地址,端口8084
SSL安全按钮关闭
证书类型选择CA or Self signed certificates,在CA文件处上传根(CA)证书即可,客户端证书和客户端key文件两栏不填
MQTT版本3.1.1
- 点击连接按钮,连接成功
- 发送测试消息,发送成功
-
参考官方使用文档的步骤🔗MQTT 客户端工具演示 | EMQX 文档,创建另一个连接作为消息接受客户端(配置与之前相同),添加订阅,在Topic中输入test
接着在原来的EMQX_SSL_TEST连接重新发送test消息,客户端会收到新消息
双向认证的SSL/TLS连接
除了SSL安全按钮启动和填入客户端证书、key文件之外,与单向认证没有什么区别,具体看图:
至此,所有测试连接成功√,你会在EMQX监听器上看见连接数增加。
参考文章链接:
- EMQ X MQTT 服务器启用 SSL/TLS 安全连接
- 开启 SSL/TLS 连接 | EMQX 文档
- 获取 SSL/TLS 证书 | EMQX 文档
- MQTT 客户端工具演示 | EMQX 文档
- 管理 | EMQX 文档
相关文章:
[MQTT]服务器EMQX搭建SSL/TLS连接过程(wss://)
👉原文阅读 💡章前提示 本文采用8084端口进行连接,是EMQX 默认提供了四个常用的监听器之一,如果需要添加其他类型的监听器,可参考官方文档🔗管理 | EMQX 文档。 本文使用自签名CA,需要提前在L…...
【纯血鸿蒙】——响应式布局如何实现?
前面介绍了自适应布局,但是将窗口尺寸变化较大时,仅仅依靠自适应布局可能出现图片异常放大或页面内容稀疏、留白过多等问题。此时就需要借助响应式布局能力调整页面结构。 响应式布局 响应式布局是指页面内的元素可以根据特定的特征(如窗口…...
深入理解Django Serializer及其在Go语言中的实现20240604
深入理解Django Serializer及其在Go语言中的实现 在现代Web开发中,前后端分离已成为主流架构模式。作为开发者,我们经常需要处理数据的序列化和反序列化,以便在前后端之间传递数据。在Django中,Serializer是一个强大的工具&#…...
电子纸在日化行业的全新应用
电子纸在日化行业的全新应用 项目背景 在一日化龙头企业他们的洗衣粉产线在AGV小车取料到运输到产品包装工序时,因为取料粉车无明显区分标识,但是产品系列有十大类。在未采用晨控电子纸之前现场采用一个转盘分为十个区域,取料工序上方会有一…...
【Redis】Redis的双写问题
在分布式系统中,双写问题通常是指数据在多个存储系统(例如数据库和缓存)中更新时出现的不一致性。这种问题在使用 Redis 作为缓存层时尤为常见。具体来说,当数据在数据库和 Redis 缓存中存在副本时,任何对数据的更新操…...
生气时,你的“心”会发生什么变化?孟德尔随机化分析猛如虎,结果都是套路...
“不生气不生气,气出病来无人替”,不少人遇事常这样宽慰自己。事实上,“气死”真不是危言耸听。越来越多的研究证明了情绪稳定对健康的重要性,那么,当情绪频繁波动时,我们的心血管究竟会发生什么变化&#…...
页面加载性能分析时,有哪些常见的性能瓶颈需要特别注意?
在进行页面加载性能分析时,以下是一些常见的性能瓶颈,需要特别注意: 长页面加载时间: 页面加载时间超过行业标准或用户期望,导致用户流失。 高 CPU 使用率: 某些脚本或操作导致 CPU 使用率飙升,…...
Scanner
Java 有一个 Scanner 类,用这个类可以接受键盘输入。 步骤: 导入该类所在的包(要使用一个类的话就必须先导入该类所在的包)创建该类的对象调用里面的功能 Scanner 有两套系统。 第一套系统: nextInt(); nextDoubl…...
vue3实现录音与录像上传功能
录音 <script setup lang"ts"> import { onMounted, reactive, ref } from vue; import useInject from /utils/useInject;const props: any defineProps<{params?: any; }>();const recObj: any reactive({blob: null, });const { $global, $fn } …...
PHP小方法
一、随机生成姓名 二、随机获取身份证 三、随机获取手机号 四、随机获取省 五、通过身份证获取生日和性别 六、通过身份证获取年龄 七、获取访问IP 八、获取访问URL地址 九、陆续增加 //一、随机生成姓名 function generateName(){$arrXing getXingList();$numbXing …...
gulimall-search P125 springboot整合elasticsearch版本冲突
一、问题 spring-boot.version 2.2.4.RELEASE,在gulimall-search pom.xml中添加elasticsearch.version 7.4.2后,发现出现如下问题:elasticsearch版本是springboot引入的6.8.6,没有变为7.4.2。 二、原因 在gulimall-search 的pom文件中&#…...
如何在Coze中实现Bot对工作流的精准调用(如何提高Coze工作流调用的准确性和成功率)
文章目录 📖 介绍 📖🏡 演示环境 🏡📒 工作流(workflow)📒📝 创建设计工作流📝 添加工作流📝 调用工作流⚓️ 相关链接 ⚓️📖 介绍 📖 在使用Coze平台创建智能Bot时,您可能会遇到一个常见问题:即便添加了正确的工作流,Bot却没有按照预期调用它们。…...
毫米波雷达阵列天线设计综合1(MATLAB仿真)
1 天线设计目标 毫米波雷达探测目标的距离、速度和角度,其中距离和角度和天线设计相关性较强。天线增益越高,则根据雷达方程可知探测距离越远;天线波束越窄,则角度分辨率越高;天线副瓣/旁瓣越低,则干扰越少…...
Freemarker
Freemarker简介 Freemarker是一个用Java语言编写的模板引擎,用于基于模板和数据生成文本输出。它可以用于生成HTML网页、XML文档、电子邮件、配置文件等任何格式的文本。Freemarker将业务逻辑与表示逻辑分离,使得开发人员可以专注于功能实现,…...
基于Zero-shot实现LLM信息抽取
基于Zero-shot方式实现LLM信息抽取 在当今这个信息爆炸的时代,从海量的文本数据中高效地抽取关键信息显得尤为重要。随着自然语言处理(NLP)技术的不断进步,信息抽取任务也迎来了新的突破。近年来,基于Zero-shot&#x…...
【python】tkinter GUI编程经典用法,Label标签组件应用实战详解
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
国产操作系统上给麒麟虚拟机安装virtualbox增强工具 _ 统信 _ 麒麟 _ 中科方德
原文链接:国产操作系统上给麒麟虚拟机安装virtualbox增强工具 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!昨天给大家带来了一篇在国产操作系统上给VirtualBox中的Win7虚拟机安装增强工具的文章,今天我们将继续深入,介绍…...
(delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第3节(特定类约束)
14.3.2 特定类约束 如果您的泛型类需要使用某个特定子集的类(特定层次结构),则可能需要根据给定基类指定约束。 例如,如果您声明: typeTCompClass<T: TComponent> class 则此泛型类的实例仅适用于组…...
【postgresql初级使用】视图上的触发器instead of,替代计划的rewrite,实现不一样的审计日志
instead of 触发器 专栏内容: postgresql使用入门基础手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 文章目录 inst…...
window.setInterval(func,interval)定时器
window.setInterval()是JavaScript中的方法,用于在指定的时间间隔重复执行某个函数或代码块。它接受两个参数,第一个参数是要执行的函数或代码块,第二个参数是时间间隔(以毫秒为单位)。 以下是使用window.setInterval…...
Einstein Summation 爱因斯坦求和 torch.einsum
Einstein Summation 爱因斯坦求和 torch.einsum flyfish 理解爱因斯坦求和的基本概念和语法,这对初学者来说可能有一定难度。对于不熟悉该表示法的用户来说,可能不如直接的矩阵乘法表达式易于理解。 整个思路是 向量的点积 -》矩阵乘法-》einsum 向…...
TCP攻击是怎么实现的,如何防御?
TCP(Transmission Control Protocol)是互联网协议族中的重要组成部分,用于在不可靠的网络上提供可靠的数据传输服务。然而,TCP协议的一些特性也使其成为攻击者的目标,尤其是DDoS(Distributed Denial of Ser…...
Chrome DevTools开发者调试工具
Chrome DevTools 是一个功能强大的网页开发工具,集成在谷歌浏览器中,帮助开发者调试和优化网页应用。以下是详细的功能说明和使用技巧: 1. 打开 DevTools 快捷键:按下 F12 或 CtrlShiftI(Windows/Linux)或…...
产品创新管理:从模仿到引领,中国企业的创新之路
一、引言 在全球化竞争日益激烈的今天,科技创新已成为推动国家经济增长和社会进步的关键动力。中国自改革开放四十年来,在科技创新领域取得了举世瞩目的成就,从跟踪模仿到自主研发,再到自主创新、开放创新和协同创新并举…...
Android 日志实时输出
开发中如果只是单纯的应用开发,Android studio基本上可以满足,但是如果应用和系统联调那就得用logcat实时输出了,我这里都是总结的实用经验,没那么多花里胡哨 Android 日志实时输出 1、输出 android log //分步,进入s…...
JavaEE初阶---多线程编程(一.线程与进程)
目录 🤣一.线程与进程的概念与联系: 进程的基本概念: 线程的基本概念: 进程和线程的区别与联系: 🙃代码执行实列: 1.通过继承Thread父类来实现多线程 2.通过实现Runnable接口来实现多线程…...
react+vite创建
要在本地初始化一个结合了React和Vite的项目,你可以遵循以下步骤: 1、安装Node.js: 确保你的机器上已安装了Node.js。如果未安装,请前往Node.js官网下载并安装。 2、使用终端或命令提示符: 打开你的终端(…...
软考 系统架构设计师系列知识点之杂项集萃(29)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(28) 第46题 以下描述中,( )不是嵌入式操作系统的特点。 A. 面向应用,可以进行裁剪和移植 B. 用于特定领域,不需要支持多任…...
[Qt开发]当我们在开发兼容高分辨率和高缩放比、高DPI屏幕的软件时,我们在谈论什么。
前言 最近在开发有关高分辨率屏幕的软件,还是做了不少尝试的,当然我们也去网上查了不少资料,但是网上的资料也很零碎,说不明白,这样的话我就做个简单的总结,希望看到这的你可以一次解决你有关不同分辨率下…...
uniapp视频组件层级太高,解决方法使用subNvue原生子体窗口
目录 前言 先看一下uniapp官网的原话: subNvue的一些参数介绍 subNvues使用方法: 绑定id 显示 subNvue 弹出层 subNvue.show() 参数信息 subNvue.hide() 参数信息 在使用subNvue 原生子体窗口 遇到的一些问题 前言 nvue 兼容性 以及使用方式 控…...
哪个网站做网店好/微信朋友圈广告在哪里做
开发的网站中,一些文章列表或新闻列表,需要在标题前放置一个小new.gif小图,标记为是最新的新闻或是文章。今天Insus.NET的练习,就是在asp.net mvc的应用程序中实现这样功能。计划使用三种不同的方法来实现。 先从数据库开始&#…...
吉林网站建设哪家有/网站优化排名易下拉排名
一、RPC概述RPC是指远程过程调用,也就是说两台不同的服务器(不受操作系统限制),一个应用部署在Linux-A上,一个应用部署在Windows-B或Linux-B上,若A想要调用B上的某个方法method(),由于不在一个内…...
北京专门做网站的/百度在线下载
只改一个值 加快宽带上网速度 记住是宽带不是WIFI 如果是使用宽带方式上网,那么在注册表中设定适当的TcpWindow值,就可以加快上网速度。 打开注册表编辑器,在其中 找到 “HKEY_LOCAL_MACHINE\System\CurrenC…...
西安制作公司网站的公司/深圳seo排名优化
最近一直在找前端工作,前前后后面了几家公司,虽然不太顺利,但是收获还是有的,就过程中遇到的面试题总结一下 CSS1:标准盒模型/IE盒模型2:自适应三栏布局3:移动端自适应方案4:FLEX布局…...
什么网站有做册子版/学生没钱怎么开网店
创业公司怎样才能被大公司收购?对于一家创业公司来说,虽然自己坚持下去也是个不错的选择,不过要是被像苹果或Google这样最具价值的公司收购,那将是一件无比激动人心的事,那怎么做才能受到它们的青睐,吸引它…...
青岛模版网站建设/简述什么是seo及seo的作用
副标题——别把技术问题转化为人际问题(作者:孙继滨)【项目经理之修炼】 全文索引 刚刚进入项目时,由于权威还没有树立,人际关系尚浅,经常会有组员不把你当回事儿。于是: 你要求组员写周报&…...