百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

在MQTT服务器上使用TLS进行安全通信

bigegpt 2024-08-01 11:54 8 浏览

我们在上篇文章里面已经搭建好了一个MQTT服务器,并且进行了简单的发布和订阅的测试。但是,我们默认使用的是TCP明文传输,

从上图看出,如果被别有用心的人抓包就可以获取我们的通信内容,没有任何隐私,黑客还可以恶意发布信息给服务器,如果是在工业交通等重要场合则后果不堪设想。

我们需要在服务器端和客户端都是使用TLS来加密我们的信息,保证信息的安全性。

TLS安全连接基本原理

这是一个简单的TLS的过程,服务器和客户端从CA证书中心取得CA证书,服务器生成自己的私钥和证书,客户端用ca证书对服务器的证书进行验证,验证通过说明服务器是合法的,如果验证不过则不与服务器通信。验证通过之后使用一对公钥和密钥进行加解密通信,中间的报文都是加密的。

MQTT使用TLS安全连接步骤:

1、生成CA私钥文件

#mkdir Myca

#cd Myca

# openssl genrsa -des3 -out ca.key 2048

#ls -l

-rwxrwxrwx 1 root root 1743 9月 5 00:08 ca.key

可以看到生成了ca的密钥文件。

参数解释:

  • genrsa 表示生成RSA私钥
  • -des3 表示密钥文件使用DES3加密,如果没有这个选项表示不加密密钥文件。
  • -out 制定输出文件的名字(.key)
  • 2048 表示密钥长度。

2、生成CA证书

#openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

# ls -l

-rwxrwxrwx 1 root root 1367 9月 6 00:58 ca.crt

rwxrwxrwx 1 root root 1679 9月 6 00:58 ca.key

参数解释:

  • req: 请求生成证书认证
  • -new: 生成一个新的证书. 它会提示填充证书的一些参数.
  • -x509: 签发X.509格式证书 .
  • -days: 指定证书的有效期限,单位天.
  • -key: 指定生成证书的私钥文件.
  • -out: 指定生成的证书文件名(.crt).

3、生成server的私钥

#openssl genrsa -out server.key 2048

#ls -l

-rwxrwxrwx 1 root root 1367 9月 6 00:58 ca.crt

-rwxrwxrwx 1 root root 1679 9月 6 00:58 ca.key

-rwxrwxrwx 1 root root 1679 9月 6 01:02 server.key ------生成的 server.key

4、生成server端请求文件(.csr)

#openssl req -new -out server.csr -key server.key

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:bj

Locality Name (eg, city) []:bj

Organization Name (eg, company) [Internet Widgits Pty Ltd]:aaa

Organizational Unit Name (eg, section) []:bbb

Common Name (e.g. server FQDN or YOUR name) []:192.168.1.102

Email Address []:test@test.com

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

设置Common Name要为自己的IP地址。其他参数随便填

5、生成服务端的证书

#openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3600

这时候在证书目录下有下面文件

-rwxrwxrwx 1 root root 1367 9月 6 00:58 ca.crt

-rwxrwxrwx 1 root root 1679 9月 6 00:58 ca.key

-rwxrwxrwx 1 root root 17 9月 6 01:10 ca.srl

-rwxrwxrwx 1 root root 1249 9月 6 01:10 server.crt

-rwxrwxrwx 1 root root 1029 9月 6 01:08 server.csr

-rwxrwxrwx 1 root root 1679 9月 6 01:02 server.key

6、修改mosquitto.conf文件

port 1884 -----设置TLS端口 为1884

cafile /myca/ca.crt -------- 证书文件

certfile /myca/server.crt ------------服务器证书文件

keyfile /myca/server.key ------------服务器私钥文件

7、启动mosquitto

使用mosquitto.conf 启动。

8、启动客户端

在客户端先要设置下TLS访问,和证书

上图看到客户端连接上了

发一个消息看看报文。

可以看到报文已经加密,无法看到报文的内容。

郑重声明:本文作品为原创,如转载须注明出处“头条号:物联网电子世界”。

?

相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...