mosquitto使用与openssl证书配置

news2025/1/18 7:17:16

开发环境:ubuntu18.04 64bit

mqtt客户端测试工具:mqtt.fx 1.7.1

1.安装

# 引入库
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
# 安装
sudo apt-get install mosquitto
#安装客户端
sudo apt-get install mosquitto-clients

2.测试

2.1启动mosquitto

# 查看mosquitto是否启动
ps -aux | grep mosquitto
mosquit+  44224  0.0  0.1  48032  6208 ?        S    20:01   0:00 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

# 启动或停止mosquitto
sudo service mosquitto start
sudo service mosquitto stop

# 或指定配置文件启动
sudo mosquitto -d -c /etc/mosquitto/mosquitto.conf

2.2mqtt.fx配置

打开mqtt.fx,新建一个配置,填定服务器ip和mqtt服务默认端口,点connect看能不能连接上。

2.3 订阅或发布消息

# 订阅消息
mosquitto_sub -h ip -t "test"
-h:服务器的ip地址,也就是mosquitto程序所在系统的ip地址
-t:topic

# 发布消息
mosquitto_pub -h ip -t "test" -m "my name is xxx"
-h:服务器的ip地址,也就是mosquitto程序所在系统的ip地址
-t:topic
-m:消息的内容

在mqtt.fx上发布消息

在ubuntu上的订阅就收到了这条消息

在mqtt.fx上订阅消息,在ubuntu上发布消息

2.4 抓包

通过抓包可看到,此时mqtt传输的还是明文。

3.生成证书

生成证书可以参数这篇博文:https://www.codenong.com/cs107110960/

但我根据这篇博文生成的证书双向验证一直失败,没找到什么原因,后来我看了另一篇博文:https://primalcortex.wordpress.com/2016/11/08/mqtt-mosquitto-broker-client-authentication-and-client-certificates/

用文中提供的一个脚本generate-CA.sh生成证书就没有问题了:

https://github.com/owntracks/tools/blob/master/TLS/generate-CA.sh

生成ca证书和server证书:

sy@ubuntu:~/key$ ./generate-CA.sh
Generating a RSA private key
......++++
...++++
writing new private key to './ca.key'
-----
Created CA certificate in ./ca.crt
subject=
    commonName                = An MQTT broker
    organizationName          = OwnTracks.org
    organizationalUnitName    = generate-CA
    emailAddress              = nobody@example.net
Warning: the CA key is not encrypted; store it safely!
--- Creating server key and signing request
Generating RSA private key, 4096 bit long modulus (2 primes)
......++++
..................................................................................++++
e is 65537 (0x010001)
--- Creating and signing server certificate
Signature ok
subject=CN = ubuntu, O = OwnTracks.org, OU = generate-CA, emailAddress = nobody@example.net
Getting CA Private Key
sy@ubuntu:~/key$ ls
ca.crt  ca.key  ca.srl  generate-CA.sh  ubuntu.crt  ubuntu.csr  ubuntu.key

生成客户端证书:

sy@ubuntu:~/key$ ./generate-CA.sh client client
--- Creating client key and signing request
Generating RSA private key, 4096 bit long modulus (2 primes)
...........................................................++++
.......................................................................................++++
e is 65537 (0x010001)
--- Creating and signing client certificate
Signature ok
subject=CN = client
Getting CA Private Key
sy@ubuntu:~/key$ ls
ca.crt  ca.srl      client.csr  generate-CA.sh  ubuntu.csr
ca.key  client.crt  client.key  ubuntu.crt      ubuntu.key

4.单向验证

4.1修改mosquitto的配置文件

在配置文件中配置openssl证书路径,修改后别忘了重启mosquitto

sudo vim /etc/mosquitto/mosquitto.conf
# 在配置文件中添加下面三行
cafile /home/sy/key/ca.crt
certfile /home/sy/key/ubuntu.crt
keyfile /home/sy/key/ubuntu.key

4.2mqtt.fx配置

填写配置名称,填写服务器地址和默认端口,选择开启ssl,配置CA证书。

4.3 订阅或发布消息

# 订阅消息
mosquitto_sub -h ip -t test --cafile ./ca.crt

#发布消息
mosquitto_pub -h ip -t test -m "my name is xxx" --cafile ./ca.crt

mqtt.fx的操作和之前一样。

4.4 抓包

通过抓包可以发现,此时已经看到不明文的消息了。

5.双向验证

5.1修改配置文件

sudo vim /etc/mosquitto/mosquitto.conf
# 在配置文件中添加下面一行,表示需要客户端提供证书
require_certificate true

5.2mqtt.fx配置

填写配置名称,填定服务器地址和默认端口,选择开启ssl,配置CA证书和客户端证书。

5.3订阅和发布消息

# 订阅消息
mosquitto_sub -h ip -t test --cafile ./ca.crt --cert ./client.crt --key ./client.key

#发布消息
mosquitto_pub -h ip -t test -m "my name is xxx" --cafile ./ca.crt --cert ./client.crt --key ./client.key

mqtt.fx的操作和之前一样。

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

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

相关文章

《NDT-LOAM: A Real-Time Lidar Odometry andMapping With Weighted NDT and LFA》深大学生

Abstract激光雷达同时定位和建图(Lidar-SLAM)从激光雷达上处理点云,并完成定位和建图。激光激光通常分为前端里程计和后端优化,可以并行运行以提高计算效率。前端里程计通过处理点云来估计激光雷达的运动,在点云配准中…

python自学之《21天学通Python》(6)

第9章 迭代器、生成器与装饰器 迭代器、生成器与装饰器是Python语言中常用的语法形式。 迭代器的使用简化了循环程序的代码并可以节约内存,生成器的使用也可以节约大量的内存,特别是需要生成大量序列的对象时。迭代器是一种可以从其中连续迭代的一个容器…

Shell 数组

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。与大部分编程语言类似,数组元素的下标由 0 开始。Shell 数组用括号来表示,元素用…

教你如何巧妙化解SSRF漏洞攻击

SSRF是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,ssrf攻击的目标是外网无法访问的内部系统。简单来说就是利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网进行攻击。 SSRF漏洞( 服务器端请求伪造 &a…

【pandas】教程:9-如何轻松处理时间序列数据

Pandas 如何轻松处理时间序列数据 数据 本节使用的数据为 data/air_quality_no2_long.csv,链接为 pandas案例和教程所使用的数据-机器学习文档类资源-CSDN文库 import pandas as pd import matplotlib.pyplot as pltair_quality pd.read_csv("data/air_qua…

实战字节码-01-基础知识

开篇字节码是什么、做什么这类问题不在这里赘述,《实战字节码》系列旨在帮助没接触过字节码的人能够快速上手做应用开发,并构建字节码技术的知识骨架,所以不会系统地介绍字节码技术的方方面面,也尽量避免叙述理论和概念相关的东西…

【笔记:模拟CMOS集成电路】噪声——基本电路噪声性能(2)

【笔记:模拟CMOS集成电路】噪声——基本电路噪声性能(2)前言1 噪声——分析基础2 噪声——基本电路噪声性能2.1 MOS管噪声模型(1)电阻RG热噪声和沟道热噪声(2)衬底电阻热噪声(3)源极寄生电阻RS热噪声2.2常见组态的单级放大器噪声分析2.2.1 CS…

Python电影观众数量回归分析 随机森林 可视化 实验报告

实验报告:Python电影观众数量回归分析随机森林可视化-数据挖掘文档类资源-CSDN文库 前言 随着经济的发展和人民日益增长的美好生活需要的显著提升,看电影成为了人民群众在闲暇时光娱乐的重要途径。面对百花齐放的电影产业,哪些电影更能带动市…

OpenGL期末大作业——模拟太阳系(免费开源)

目录 一、项目介绍 二、配置与运行 三、项目地址 一、项目介绍 这是一个综合的openGL场景,模拟太阳系。场景中有光照,纹理等,并有丰富的视角控制,UI交互,比如WASD/IJKL键控制视角的移动等等。一个太阳系的场景&#…

大数据基础平台搭建-(五)Hive搭建

大数据基础平台搭建-(五)Hive搭建 大数据平台系列文章: 1、大数据基础平台搭建-(一)基础环境准备 2、大数据基础平台搭建-(二)Hadoop集群搭建 3、大数据基础平台搭建-(三&#xff09…

Android今日头条平台隐私合规整改

头条应用管理平台开发者合规指引:https://open.oceanengine.com/labels/7/docs/1730079845340164头条审核合规的app,需要具备以下条件:用户协议弹窗抖音隐私政策(模板示例):https://sf3-cdn-tos.douyinstat…

别告诉我你只知道waitnotify,不知道parkunpark???

目录 park&unpark wait,notify 和 park,unpark的区别 park unpark 原理 先调用park的情况 先调用park,在调用unpark的情况 先调用unpark,在调用park的情况 park&unpark park和unpark都是LockSupport的方法,park用于暂停当前线程的运行,而unpark用于恢复该线程的…

服务机器人“众生相”

在多种因素的共同作用下,早年间经常出现在科幻片中的机器人已然穿越荧屏来到了现实世界,为人们的日常生活增添了几分便利。比如,在家庭场景中,扫地机器人帮助人们解放双手;在餐饮场景中,送餐机器人为顾客提…

C语言--探索函数栈帧的创建与销毁

目录 为main函数开辟栈帧 创建变量 传参 为自定义函数开辟栈帧 返回 局部变量是怎么创建的?为什么局部变量的值是随机值?函数是怎么传参的?形参与实参的关系?函数怎么调用与返回? 我们用VS2013的环境进行探索…

Https为什么比Http安全?

Https是在Http之上做了一层加密和认证; 主要的区别是Https在TLS层对常规的Http请求和响应进行加密,同时对这些请求和响应进行数字签名。 Http请求的样式: 明文传输,通过抓包工具可以抓到 GET /hello.txt HTTP/1.1 User-Agent: c…

【三】Netty 解决粘包和拆包问题

netty 解决粘包和拆包问题TCP 粘包/拆包的基础知识粘包和拆包的问题说明TCP粘包/拆包 原因粘包和拆包的解决策略tcp 粘包/拆包 的问题案例大致流程如图:代码展示(jdk1.7)TimeServer 服务端启动类TimeServerHandler 服务端业务处理类TimeClient 客户端启动类TimeClientHandler 客…

Python入门注释和变量(2)

1.1输入 a input("请输入内容") print("您输入的内容是:{}".format(a)) 输入的内容会帮我们转换成字符串形式 2.1运算符 2.1.1算数运算符 以a 10 , b 20 为例进行运算 运算符描述实例加两个对象相加ab输出结果30-减得到负数或是一个数减…

You辉编程_有关boot

一、SpringBoot多环境配置 1.环境的配置信息 (1)application.properties #指定默认使用dev的配置 spring.profiles.activedev (2)application-dev.properties #开发环境 server.port8080 branchdev (3)application-prod.properties #测试环境 server.port8081 branchtest2…

【Nacos】Nacos介绍和简单使用

Nacos介绍及简单使用 Nacos介绍 Nacos是SpringCloudAlibaba架构中最重要的组件。Nacos是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台,提供了注册中心、配置中心和动态DNS服务三大功能。能够无缝对接SpringCloud、Spring、Dubbo等流行框架。 …

环境搭建 | MuMu模拟器 - Window10/11 系列

🖥️ 环境搭建 专栏:MuMu模拟器 - Window10/11 系列 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ …