记录linux环境下搭建本地MQTT服务器实现mqtt的ssl加密通讯

1、ubuntu安装mosquitto

sudo apt-get update//安装服务端
sudo apt-get install mosquitto//安装客户端
sudo apt-get install mosquitto-clients

 2、安装openssl

3、mqtts/tls加密传输

mosquitto原生支持了TLS加密,TLS(传输层安全)是SSL(安全套接层)的新名称,mqtts/tls支持3种加密模式:

  • CA Signed server certificate:由CA机构签名的服务器认证(启用ssl加密不做认证)
  • Self-signed server certificate:自签名的服务器认证自签名服务器认证需要填写PEM格式的自签名CA证书 (单向认证)
  • Self-signed server & client certificate:自签名的服务器&客户端双向认证。自签名的双向认证需要填写PEM格式的自签名CA证书(CA Certificate),客户端证书(Client Certificate)和客户端密钥(Client Key)。 如果客户端密钥文件是加密的,需要填写客户端密钥密码(Client Key Passphrase)。(双向认证)

证书生成

使用github中的一个脚本,可以让hostname为localhost、本机ip或127.0.0.1,脚本从OweTracks项目下载并运行generate-CA.sh脚本。该脚本创建CA文件,生成服务器证书,并使用CA来签名证书。

//创建证书目录
mkdir certs//下载脚本到certs
cd certs
wget https://raw.githubusercontent.com/owntracks/tools/master/TLS/generate-CA.sh//执行脚本
sh ./generate-CA.sh

可生成以下内容:

[yangzheng@localhost certs]$ ls
ca.crt  ca.key  ca.srl generate-CA.sh  localhost.localdomain.crt  localhost.localdomain.csr  localhost.localdomain.key

将上述生成的文件拷贝到/etc/mosquitto/certs目录下(也可以不拷贝,再配置文件指定绝对路径)

//给下面3个文件换个名字
[yangzheng@localhost certs]$ mv localhost.localdomain.crt server.crt
[yangzheng@localhost certs]$ mv localhost.localdomain.csr server.csr
[yangzheng@localhost certs]$ mv localhost.localdomain.key server.key//拷贝文件到/etc/mosquitto/certs
[yangzheng@localhost certs]$ sudo cp -rf  ca.crt  ca.key  ca.srl client.crt  client.csr  client.key   server.crt  server.csr  server.key /etc/mosquitto/certs/

修改mosiquitto.conf,添加证书的路径,加密端口8883(配置端口监听端口默认是1883)

[yangzheng@localhost app]$ cat /etc/mosquitto/mosquitto.conf
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.examplepid_file /var/run/mosquitto.pidpersistence true
persistence_location /var/lib/mosquitto/log_dest file /var/log/mosquitto/mosquitto.log#add
listener 8883
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/host.crt
keyfile /etc/mosquitto/certs/host.key# one-way or two-way authentication
#require_certificate true
#end addinclude_dir /etc/mosquitto/conf.d

启动mqtt服务

[yangzheng@localhost certs]$ sudo mosquitto -d -c /etc/mosquitto/mosquitto.conf^C
[yangzheng@localhost certs]$ ps -aux |grep mosquitto
mosquit+  4860  0.1  0.1  45356  5684 ?        Ss   17:19   0:05 mosquitto -d -c /etc/mosquitto/mosquitto.conf
yangzhe+  4958  0.0  0.0  16156  1036 pts/10   S+   18:13   0:00 grep mosquitto

4 测试

ubuntu 命令行测试

a 单向认证

单向认证时客户端不需要生成客户端证书、钥匙和请求,仅需要将CA证书ca.crt,ca.key,ca.srl,拷贝到客户端系统中, 测试结果:

b 双向认证

双向认证则需根据CA证书生成客户端证书,生成客户端证书、钥匙和请求的方法是在CA证书文件夹下执行OpenSSL,命令如下:

[yangzheng@localhost certs]$ openssl genrsa -out client.key 2048
[yangzheng@localhost certs]$ openssl req -new -out client.csr -key client.key -subj "/CN=client/O=example.com"
[yangzheng@localhost certs]$ openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAserial ./ca.srl -out client.crt -days 3650 -addtrust clientAuth

测试结果:

源码测试,关键配置:

a 只加密不认证

    MQTTClient_SSLOptions ssl_opts   = MQTTClient_SSLOptions_initializer;ssl_opts.enableServerCertAuth    = DISABLE;conn_opts.ssl                    = &ssl_opts;

b 单向认证

    MQTTClient_SSLOptions ssl_opts  = MQTTClient_SSLOptions_initializer;ssl_opts.enableServerCertAuth   = ENABLE;ssl_opts.trustStore             = "/mnt/tmp/ca.crt";conn_opts.ssl                   = &ssl_opts;

c 双向认证

    MQTTClient_SSLOptions ssl_opts  = MQTTClient_SSLOptions_initializer;ssl_opts.enableServerCertAuth   = ENABLE;ssl_opts.trustStore             = "/mnt/tmp/ca.crt";ssl_opts.privateKey             = "/mnt/tmp/client.key";ssl_opts.keyStore               = "/mnt/tmp/client.crt";conn_opts.ssl                   = &ssl_opts;

备注:

1、c 客户端源码下载git clone https://github.com/eclipse/paho.mqtt.c.git

2、使用mqtts/tls加密通信时,server地址需加"ssl://", 例如"ssl://127.0.0.1:8883";

3、编译mqtt源码时,在makefile增加OPENSSL宏定义,如CFLAGS += -DOPENSSL

4、需要移植openssl库,mqtt源码编译需要链接到openssl中的include和lib

测试结果:

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

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

相关文章

如何设置显卡驱动以实现深度学习推理的最佳性能

快速解决深度学习推理过程cuda或tensorRT推理速度变慢的办法,记录一下方便自己以后查看。 一、显卡性能设置: 低延时模式——超高、最大帧速度——1000每秒帧数、电源管理模式——最高性能优先 二、cmd终端输入nvidia-smi -q -d SUPPORTED_ClOCKS 三…

FortiWLC 控制器系统恢复操作介绍

简介 对于 FortiWLC 控制器在有些实际操作过程中,会由于某些原因导致升级失败, 无法升级,或是系统文件错乱等情况, 对于这些问题,我们可以通过重新恢复控制 器系统来解决这些问题. 本文详细说明恢复控制器系统的操作步骤. 注意: 本操作需要通过串口登录到控制器设备上,另外在控…

树木检测系统源码分享

树木检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

什么是电商云手机?可以用来干什么?

随着电商行业的迅速发展,云手机作为一种创新工具正逐渐进入出海电商领域。专为外贸市场量身定制的出海电商云手机,已经成为许多外贸企业和出海电商卖家的必备。本文将详细介绍电商云手机是什么以及可以用来做什么。 与国内云手机偏向于游戏场景不同&…

计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践

计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践 1. 什么是生成对抗网络? 生成对抗网络(Generative Adversarial Networks,简称GANs)是由Ian Goodfellow等人在2014年提出的一种深度学习模型,主要用于数…

分布式算法

分布式场景下的核心问题 分布式场景下困扰我们的3个核心问题(CAP):一致性、可用性、分区容错性。 1、一致性(Consistency):无论服务如何拆分,所有实例节点同一时间看到是相同的数据。 2、可用性…

【C++笔试强训】

​ 学习编程就得循环渐进,扎实基础,勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 第一题:除2! 第二题:dd爱框框 第三题:简写单词 第一题:除2! 牛客网…

ROS理论与实践学习笔记——1 Ros概述与环境搭建

1、ROS概述 ROS全称Robot Operating System(机器人操作系统); “ROS Plumbing Tools Capabilities Ecosystem”,即ROS是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体。 2、ROS安装 2.1 安装配置虚拟机软件 VMware或virtualbox…

【项目实战】如何在项目中基于 Spring Boot Starter 开发简单的 SDK

什么是SDK 通常在分布式项目中,类和方法是不能跨模块使用的。为了方便开发者的调用,我们需要开发一个简单易用的SDK,使开发者只需关注调用哪些接口、传递哪些参数,就像调用自己编写的代码一样简单。实际上,RPC(远程过…

从碎片到整合:EasyCVR平台如何重塑城市感知系统的视频数据生态

随着城市化进程的加速,城市感知系统作为智慧城市的重要组成部分,正逐步成为提升城市管理效率、保障公共安全、优化资源配置的关键手段。EasyCVR视频汇聚融合平台,凭借其强大的数据整合、智能分析与远程监控能力,在城市感知系统中扮…

short-link笔记

1.Accessors(chain true) (见于Result类的注解) 不写默认为false,当该值为 true 时,对应字段的 setter 方法调用后,会返回当前对象。 -->可用于链式编程 参:Accessors 注解详解-CSDN博客 2.关键信息脱敏 利用将class通过jackon序列化为…

分布式计算框架

进入Scala模式 终端里输入Scala 创建一个新的Scala文件 vim 文件名.scala 复制粘贴代码 ctrlshift c/v 使用vim 先进入插入模式,可以通过按i键来实现,然后粘贴代码,完成后按Esc键退出插入模式,保存并退出可以通过输入:wq然后按…

【中台设计】数字中台,大数据中台解决方案,中台建设指南(资料Word分享)

1. 中台概念 2. 推动企业组织模式演进 3. 建设方法 4 .中台内容 5. 数据安全体系 中台内容围绕数据中台建设评估、整体框架、数据采集,结构化、半结构化、非结构化的数据采集,数据计算能力、存储计算引擎、数据架构、数据挖掘、各种不同数据层建设、模型…

拒绝信息泄露!VMD滚动分解 + Informer-BiLSTM并行预测模型

前言 在时间序列预测任务中,像 EMD(经验模态分解)、CEEMDAN(完全集合经验模态分解)、VMD(变分模态分解) 等分解算法的使用有可能引入信息泄露,具体情况取决于这些方法的应用方式。信…

Vue+Tui-image-editor实现图片编辑(涂鸦,裁剪,标注,旋转,滤镜)

目录 前言 效果展示 涂鸦 裁剪 标注 旋转 滤镜 安装 使用 中文化自定义样式按钮优化 参考链接 前言 需求:对图片进行旋转、缩放、裁剪、涂鸦、标注、添加文本等。 效果展示 涂鸦 裁剪 标注 旋转 滤镜 安装 npm i tui-image-editor // or yarn add tui-image…

【MySql】在ubuntu下安装MySql数据库

目录 查看操作系统版本 添加 MySql APT源 访问下载页面并下载发布包 安装发布包 执行安装命令 从MySql APT源更新包信息 安装MySql 执行安装命令 查看MySql状态 开启自启动 登录MySql 查看操作系统版本 rootVM-24-2-ubuntu:~# lsb_release -a No LSB modules are ava…

数据集-目标检测系列-鲨鱼检测数据集 shark >> DataBall

数据集-目标检测系列-鲨鱼检测数据集 shark >> DataBall 数据集-目标检测系列-鲨鱼检测数据集 shark 数据量:6k 想要进一步了解,请联系。 DataBall 助力快速掌握数据集的信息和使用方式,百种数据集,持续增加中。 示例&…

【学习笔记】Transformer架构探讨

Transformer 是一种彻底改变人工智能方法的神经网络架构。它首次在 2017 年的里程碑式论文 "Attention is All You Need"[1] 中被提出,并迅速成为深度学习模型的首选架构,为 OpenAI 的 GPT、Meta 的 Llama 和 Google 的 Gemini 等文本生成模型…

Django操作ES实现搜索功能

Django操作ES实现题目的高亮搜索功能 一、基础配置二、使用ES完成题目的高亮搜索1. ES的初始化接口2. 使用ES实现题目的增删改查1. 题目的高亮搜索2. 题目的高亮搜索优化3. 将数据存储到MYSQL中持久化存储并同步到ES中一、基础配置 下载依赖,与之前配置的ES版本一致。 ES的配置…

SpringBoot文档管理系统:架构与功能

第2章相关技术 2.1 Java技术介绍 Java语言擅长开发互联网类应用和企业级应用,现在已经相当的成熟,而且也是目前使用最多的编程语言之一。Java语言具有很好的面向对象性,可以符合人的思维模式进行设计,封装是将对象的属性和方法尽可…