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

安装EMQX软件

首先先安装EMQX软件

软件安装说明

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

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

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

初始默认用户名:admin

密码:public

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

安装OpenSSL

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

软件下载地址:

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

里我选择1.1.1版本

将下好的安装包解压

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 = 512000ssl_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)

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

点击 Connect 按钮,连接成功后,如果能正常执行 MQTT 发布/订阅 操作,则自签名证书的 SSL 单向认证配置成功。

MQTT使用TLS加密相关推荐

  1. 识别TLS加密恶意流量

    利用背景流量数据(contexual flow data)识别TLS加密恶意流量 识别出加密流量中潜藏的安全威胁具有很大挑战,现已存在一些检测方法利用数据流的元数据来进行检测,包括包长度和到达间隔时间 ...

  2. Openldap配置TLS加密传输(完整版——shell脚本实现[分别在客户端与服务器端执行脚本,实现TLS加密])

    此脚本中只是负责实现了TLS加密配置部分,openLDAP的编译安装以及设置是前期已经配置好的! 具体的配置看上上篇文章openLDAP的编译安装以及配置. 注意slapd.conf中的配置,脚本中为 ...

  3. Openldap配置TLS加密传输(完整版——shell脚本实现[即在客户端执行代码,即可实现TLS加密])

    此脚本中只是负责实现了TLS加密配置部分,openLDAP的编译安装以及设置是前期已经配置好的! 具体的配置看上上篇文章openLDAP的编译安装以及配置. 注意slapd.conf中的配置,脚本中为 ...

  4. Openldap配置TLS加密传输(完整版——手动配置)

    首先要实现openLDAP的编译安装以及配置           openLDAP的编译安装以及配置 注意:上篇中的  3. 主配置文件slapd.conf  中  信息如下所示:           ...

  5. Android 屏幕防偷窥,Android 8.1将发布:启用TLS加密防偷窥

    [中关村在线新闻资讯]10月25日消息,谷歌已经面向开发者放出了Android 8.1的相关预览版本,预计Android 8.1系统距离正式发布也不会太远.现在又有消息称,Android 8.1要启用 ...

  6. 这就是你日日夜夜想要的docker!!!---------TLS加密远程连接Docker

    文章目录 一.Docker 存在的安全问题 1.Docker 自身漏洞 2.Docker 源码问题 3.Docker 架构缺陷与安全机制 二.TLS加密通讯协议 1.TLS介绍 2.CA证书 三.配置 ...

  7. grpc加TLS加密和令牌认证

    grpc加TLS加密和令牌认证 (金庆的专栏 2018.11) 用 golang 创建 grpc 服务,开启 TLS 加密,并采用令牌认证. 然后用 C++ 和 golang 分别创建客户端连接服务器 ...

  8. 二、Prometheus TLS加密认证和基于 basic_auth 用户名密码访问

    文章目录 Prometheus 基于用户名密码访问 1. `Node Export`端配置密码 2. 在被监控端这里生成密码 3. 在node_exporter中新增配置文件 4. node_expo ...

  9. java 通过SSL/TLS加密https建立连接

    这个项目是基于与Ruby客户端进行通信,经过查看源代码,发现对方是经过TLS加密通信.第一次调试,尝试用serversocket与对方进行沟通,可以收到数据,但是无法获取http的包头数据,因此,将先 ...

最新文章

  1. 腾讯新预训练模型LP-BERT
  2. python是不是特别垃圾-谈谈python垃圾回收机制
  3. 如何用过滤器过滤HTTP协议和非HTTP协议编码
  4. ML之Xgboost:利用Xgboost模型对数据集(比马印第安人糖尿病)进行二分类预测(5年内是否患糖尿病)
  5. 分布式数据库技术基础:数据分片介绍
  6. win10无法更改计算机设置,Win10“无法保存ip设置,请检查一个或多个设置并重试”的解决方法...
  7. 使用javascript及java对Cookie的读写
  8. Transact-SQL 语法约定
  9. DPDK学习0 -- 学习步骤
  10. sas和python哪个好学_Sas R和Python的比较 | 数据分析的工具选择
  11. [加壳脱壳] VMP壳原理简介
  12. 使用Python开发游戏运行脚本(三)图片查找
  13. U盘 安装 WIN7 ISO
  14. NLP(9): 机器学习介绍,朴素贝叶斯,python高阶函数应用
  15. PHP微信支付 “商家转账到零钱”一文概述
  16. Python编程语言体现出的设计模式
  17. POSIX Timer
  18. php常用的数组相关的函数及面向对象
  19. windows环境下svn安装操作说明
  20. 基于Python的图书推荐系统的设计与实现

热门文章

  1. nginx反向代理tcp
  2. mybatis一对一关联查询
  3. 作业帮7.10.2体验报告
  4. 业余时间干什么兼职才是最适合自己的
  5. python:根据一个列表对另外一个列表排序
  6. 企鹅号搬运视频做伪原创
  7. Thymeleaf---th:text以及th:utext
  8. 指纹识别 之 电容式、超声波和光学式 三面鼎立
  9. 重拾设计模式-代理模式
  10. 彩色星球图片生成1:使用Gan实现(pytorch版)