MQTT使用TLS加密

这篇具有很好参考价值的文章主要介绍了MQTT使用TLS加密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        使用TLS加密在MQTT的使用中是比较常见的,TLS加密过程在网上有很多说明,但是没几个应用教程的,MQTT软件中的EMQX软件是支持TLS加密的,只不过要进行一些设置。

安装EMQX软件

首先先安装EMQX软件

软件安装说明

免费下载、试用 EMQ 产品 (emqx.com)https://www.emqx.com/zh/try?product=broker

为了方便测试,选择Ubuntu版本,在虚拟机中安装

MQTT使用TLS加密

 安装启动完后,打开浏览器,输入网址localhost:18083或者127.0.0.1:18083

MQTT使用TLS加密

初始默认用户名:admin

密码:public 

登录上去后,看到其功能界面

MQTT使用TLS加密

安装OpenSSL

 接下来就是安装OpenSSL,来生成自签名证书

软件下载地址:

/source/index.html (openssl.org)https://www.openssl.org/source/

里我选择1.1.1版本

MQTT使用TLS加密

将下好的安装包解压

tar -xvf openssl-1.1.1s.tar.gz

 接着进入解压出来的文件夹

cd openssl-1.1.1s/

设置好安装路径

 ./config --prefix=/usr/local/openssl

 然后直接编译并安装

make
sudo make install #安装需要权限

 SSL/TLS 证书准备

 参考文章链接:https://www.emqx.com/zh/blog/emqx-server-ssl-tls-secure-connection-configuration-guide

首先,我们需要一个自签名的 CA 证书。生成这个证书需要有一个私钥为它签名,可以执行以下命令来生成私钥:

openssl genrsa -out ca.key 2048

这个命令将生成一个密钥长度为 2048 的密钥并保存在 ca.key 中。有了这个密钥,就可以用它来生成 EMQX 的根证书了:

openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.pem

查看 CA 证书信息(可选):

openssl x509 -in ca.pem -noout -text

根证书是整个信任链的起点,如果一个证书的每一级签发者向上一直到根证书都是可信的,那个我们就可以认为这个证书也是可信的。有了这个根证书,我们就可以用它来给其他实体签发实体证书了。

实体(在这里指的是 EMQX)也需要一个自己的私钥对来保证它对自己证书的控制权。生成这个密钥的过程和上面类似:

openssl genrsa -out emqx.key 2048

新建 openssl.cnf 文件,

  • req_distinguished_name :根据情况进行修改,
  • alt_names: BROKER_ADDRESS 修改为 EMQX 服务器实际的 IP 或 DNS 地址,例如:IP.1 = 127.0.0.1,或 DNS.1 = broker.xxx.com
[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

然后以这个密钥和配置签发一个证书请求:

openssl req -new -key ./emqx.key -config openssl.cnf -out emqx.csr

然后以根证书来签发 EMQX 的实体证书:

openssl x509 -req -in ./emqx.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out emqx.pem -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf

查看 EMQX 实体证书(可选):

openssl x509 -in emqx.pem -noout -text

验证 EMQX 实体证书,确定证书是否正确:

$ openssl verify -CAfile ca.pem emqx.pem
emqx.pem: OK

准备好证书后,我们就可以启用 EMQX 的 TLS/SSL 功能了。

SSL/TLS 启用及验证

将前文中通过 OpenSSL 工具生成的 emqx.pememqx.key 及 ca.pem 文件拷贝到 EMQX 的 /etc/emqx/certs 目录下,并参考如下配置修改 emqx.conf

listeners.ssl.default {
  bind = "0.0.0.0:8883"
  max_connections = 512000
  ssl_options {
    keyfile = "/etc/emqx/certs/emqx.key"
    certfile = "/etc/emqx/certs/emqx.pem"
    cacertfile = "/etc/emqx/certs/ca.pem"
  }
}

接着重启EMQX

sudo emqx stop
sudo emqx start

当配置完成并重启 EMQX 后,我们使用 MQTT 客户端工具 - MQTT X(该工具跨平台且支持 MQTT 5.0),来验证 TLS 服务是否正常运行。

  • 参照下图在 MQTT X 中创建 MQTT 客户端(Host 输入框里的 127.0.0.1 需替换为实际的 EMQX 服务器 IP,即虚拟机IP)

MQTT使用TLS加密

此时 Certificate 一栏需要选择 Self signed ,并携带自签名证书中生成的 ca.pem 文件。 

点击 Connect 按钮,连接成功后,如果能正常执行 MQTT 发布/订阅 操作,则自签名证书的 SSL 单向认证配置成功。文章来源地址https://www.toymoban.com/news/detail-441374.html

到了这里,关于MQTT使用TLS加密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HTTP协议 和 HTTPS协议的区别(4点) && HTTPS的缺点 && HTTP如何使用SSL/TLS协议加密过程 && CA证书干啥的

      1. HTTP协议的端口号是80, HTTPS协议的端口号是443 2. HTTP协议使用的URL是以 http:// 开头,HTTPS协议使用的URL是以https://开头 3. HTTP协议和HTTPS协议最主要的区别是: HTTP协议所生成的HTTP请求报文被TCP协议 以明文形式透明传输,同时 客户端与服务器之间无法核验对方的身份(不晓

    2024年02月14日
    浏览(46)
  • 使用 SSL/TLS 加强 MQTT 通信安全

    在之前的文章中,我们探讨了认证和访问控制机制。接下来,我们将介绍传输层安全协议(TLS)在提升 MQTT 通信安全方面的重要作用。本文将着重介绍 TLS 以及它如何保证 MQTT 通信的完整性、机密性和真实性。 在开始之前,让我们先来了解几个关键概念。 握手:TLS 握手是客

    2024年02月13日
    浏览(35)
  • 使用Netty实现SSL和TLS加密通信

            Netty支持使用SSL和TLS协议进行加密通信,可以在保证通信安全的同时,保证数据传输的完整性和可靠性。下面我们将演示如何使用Netty实现SSL和TLS加密通信。 首先,我们需要生成一个SSL证书,用于进行加密通信。可以使用OpenSSL等工具生成证书,也可以使用Netty提供

    2024年02月13日
    浏览(47)
  • 【Netty】使用 SSL/TLS 加密 Netty 程序(二十)

    回顾Netty系列文章: Netty 概述(一) Netty 架构设计(二) Netty Channel 概述(三) Netty ChannelHandler(四) ChannelPipeline源码分析(五) 字节缓冲区 ByteBuf (六)(上) 字节缓冲区 ByteBuf(七)(下) Netty 如何实现零拷贝(八) Netty 程序引导类(九) Reactor 模型(十) 工作原理

    2024年02月07日
    浏览(36)
  • 阿里云 微消息队列 MQTT使用与部分常见问题处理

    阿里云微消息队列MQTT产品的接入和使用流程,以及常见问题处理如下: **接入与使用流程: **1. 创建实例 : 登录阿里云控制台,在消息队列MQTT产品页面创建实例,并获取实例ID、用户名(ClientId)和密码(Token)等信息。 2. SDK集成 : 根据你的设备或应用平台选择合适的MQ

    2024年01月24日
    浏览(38)
  • HTTPS、TLS加密传输

    1、HTTPS(HyperText Transfer Protocol Secure) HTTPS(HyperText Transfer Protocol Secure)是一种加密通信协议,用于在计算机网络上进行安全的数据传输。它使用TLS(Transport Layer Security)协议建立一个加密的连接,确保在客户端和服务器之间传输的数据是加密和完整的。 2、TLS TLS是一个加密

    2024年02月14日
    浏览(25)
  • 【MQTT】MQTT协议与指令下发;MQTT与Kafka比较

    相关文章: (一)MQTT协议与指令下发;MQTT与Kafka比较 (二)用MQTT在Spring Boot项目中实现异步消息通信 详细讲讲MQTT协议 当涉及到 物联网 和 设备通信 时,MQTT(Message Queuing Telemetry Transport)是一种轻量级、开放、灵活的协议。MQTT最初是为低带宽、不稳定网络环境下的传感器

    2024年02月02日
    浏览(38)
  • [grpc]双向tls加密认证

    假设gRPC服务端的主机名为 qw.er.com ,需要为gRPC服务端和客户端之间的通信配置tls双向认证加密。 生成ca根证书。生成过程会要求填写密码、CN、ON、OU等信息,记住密码。 新建并编辑文件 openssl.cnf 文件。req_distinguished_name中内容按需填写,DNS.1要替换成实际域名。 生成服务端证

    2024年02月14日
    浏览(49)
  • DoIP通信中的TLS加密

    TLS(传输层安全)是一种加密协议,用于在不安全的网络环境中保护数据的完整性和隐私。在DoIP(诊断协议)诊断中,TLS可以应用于确保诊断数据在传输过程中不被窃取或篡改。DoIP(诊断协议)是一种基于以太网的汽车诊断协议,用于在车辆的各个电子控制单元(ECU)之间

    2024年02月09日
    浏览(25)
  • HTTPS、对称/非对称加密、SSL/TLS

    问题描述:HTTP的请求和响应都是明文传输,有安全隐患 HTTPS :HTTPS并不是一个单独的协议,是在 TCP 和 HTTP 之间加入了 SSL/TLS 安全协议,使得报文能够加密传输,SSL是TLS的前身,现在使用的大多都是TLS。 对称加密 :发送方和接收方约定一个同样的规则也就是同一个密钥来对

    2024年04月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包