[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文件

  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.rhkb.cn/news/344483.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】ES, 广告索引

思考: 1)直接把别名切换到上一个版本索引 --解决问题 2)广告层级索引如何解决? -routing、join 3)查询的过程:query and fetch, 优化掉fetch 4)segment合并策略 5)全量写入时副…

17、matlab实现均值滤波、中值滤波、Butterworth滤波和线性相位FIR滤波

1、创建信号 1)创建正余弦信号、噪声信号和混合信号 原始正余弦信号公式:Signal1 sin(2*pi*20* t) sin(2*pi*40* t) sin(2*pi*60* t) 高斯分布的白噪声:NoiseGauss [randn(1,2000)] 均匀分布的白噪声:[rand(1,2000)] 正余弦…

数据库管理-第198期 升级Oracle ACE Pro,新赛季继续努力(20240605)

数据库管理198期 2024-06-05 数据库管理-第198期 升级ACE Pro,新赛季继续努力(20240605)1 惊喜2 变化3 Oracle ACE总结 数据库管理-第198期 升级ACE Pro,新赛季继续努力(20240605) 作者:胖头鱼的…

【MySQL数据库】my.ini文件参数中文注释

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深…

【JavaScript】内置对象 - 字符串对象 ④ ( 根据索引位置返回字符串中的字符 | 代码示例 )

文章目录 一、根据索引位置返回字符串中的字符1、charAt 函数获取字符2、charCodeAt 函数获取字符 ASCII 码3、数组下标获取字符 String 字符串对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String 一、根据索引位置返回…

React Hooks 封装可粘贴图片的输入框组件(wangeditor)

需求是需要一个文本框 但是可以支持右键或者ctrlv粘贴图片,原生js很麻烦,那不如用插件来实现吧~我这里用的wangeditor插件,初次写初次用,可能不太好,但目前是可以达到实现需求的一个效果啦!后面再改进吧~ …

【NI国产替代】500 MSPS 采样率,14 bit 分辨率数据采集盒子

• 双高速高精度数据采集通道 • 支持内外精准触发采样模式 • 丰富的总线控制接口 • 抗干扰能力强 高速采集盒子是一款双通道,具有 500 MSPS 采样率,14 bit 分辨率的高速高精度数据采集设备,其模拟输入带宽为 200 MHz,…

278 基于Matlab GUI的中重频PD雷达仿真系统

基于Matlab GUI的中重频PD雷达仿真系统。具有26页文档报告。仿真雷达信号的发射、传播、散射、接收、滤波、信号处理、数据处理的全部物理过程,因此应当实现对雷达发射机、天线、接收机、回波信号处理、数据处理的建模与仿真。程序已调通,可直接运行。 2…

【启程Golang之旅】让文件操作变得简单

欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了…

C++STL简介

一、STL介绍 STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 二、STL的版本 1、原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完…

二叉树的实现(初阶数据结构)

1.二叉树的概念及结构 1.1 概念 一棵二叉树是结点的一个有限集合,该集合: 1.或者为空 2.由一个根结点加上两棵别称为左子树和右子树的二叉树组成 从上图可以看出: 1.二叉树不存在度大于2的结点 2.二叉树的子树有左右之分,次序不能…

造假高手——faker

在测试写好的代码时通常需要用到一些测试数据,大量的真实数据有时候很难获取,如果手动制造测试数据又过于繁重无聊,显得不够优雅,今天我们介绍的faker这个轮子可以完美的解决这个问题。faker是一个用于生成各种类型假数据的库&…

C++STL初阶(3):string模拟实现的完善

1.流提取>>的优化(利用缓存区的思想) istream& operator>>(istream& is,string& str) {str.clear();char c;c is.get();while (c ! \0 && c ! \n) {str c;c is.get();}return is; } 在上文的对string的实践中&#…

Android Lottie 体积优化实践:从 6.4 MB 降到 530 KB

一、说明 产品提出需求:用户有 8 个等级,每个等级对应一个奖牌动画。 按照常用的实现方式: 设计提供 8 个 lottie 动画(8 个 json 文件)。研发将 json 文件打包进入 APK 中。根据不同等级播放指定的动画。 每一个 …

React + SpringBoot实现图片预览和视频在线播放,其中视频实现切片保存和分段播放

图片预览和视频在线播放 需求描述 实现播放视频的需求时,往往是前端直接加载一个mp4文件,这样做法在遇到视频文件较大时,容易造成卡顿,不能及时加载出来。我们可以将视频进行切片,然后分段加载。播放一点加载一点&am…

Nginx(openresty) 查看连接数和并发送

1 通过浏览器查看 #修改nginx配置文件 location /status {stub_status on;access_log off;allow 192.168.50.0/24;deny all;} #重新加载 sudo /usr/local/openresty/nginx/sbin/nginx -s reloadActive connections //当前 Nginx 当前处理的活动连接数。 server accepts handl…

【kubernetes】k8s集群中的ingress(对外服务)规则详解

目录 一、Ingress 简介 1.1service的作用 1.2外部访问方案 (四种)🌹🌹🌹 部署externalIPs 1.3Ingress 是什么 二、Ingress 组成🌹🌹🌹 三、Ingress 工作原理🐱&#x1f…

kafka的leader和follower

leader和follower kafka的leader和follower是相对于分区有意义的,不是相对于broker。 因为每个分区都有leader和follower, leader负责读写数据。 follower负责复制leader的数据保存到自己的日志数据中,并在leader挂掉后重新选举出leader。 kafka会再…

九家大模型“决战”高考!AI作文哪家强?阅卷名师点评来了!

2024.06.07 本文字数:12474,阅读时长大约21分钟 导读:语文老师对AI作文的评价是,“中规中矩,没有‘血肉’,缺一点情感和灵气。” 作者 | 第一财经 刘晓洁 冯小芯 马一凡 吕倩 又到一年高考季,…

使用树莓派和 L298N 来 DIY 小车底盘

树莓派小车可以作为 STEM(科学、技术、工程、数学)教育的工具,在实际操作中帮助学生理解和学习电子技术、编程和机器人原理。可以培养学生的动手能力、解决问题的能力和创新思维。 随着近年 AI 技术的高速发展,SLAM、VSLAM 甚至带…