RocketMQ 5.0 如何配置TLS加密传输?

简介: 干货!一起来和小伟老师学习 RocketMQ 5.0 如何配置TLS加密传输吧~

本文作者:李伟,社区里大家叫小伟,Apache RocketMQ Committer,RocketMQ Python客户端项目Owner ,Apache Doris Contributor,腾讯云RocketMQ开发工程师。

01 传输架构图

Namesrv:5.1.0

Broker:5.1.0

Dashboard:1.0.1-SNAPSHOT

02 准备Namesrv、Broker、Client的ca证书、密钥

以下全部操作在的目录在:/etc/rocketmq, 并且Namesrv、Broker、Dashboard在同一个机器上

实际操作时, dashboard或者客户端可以是其他的机器

  1. 生成ca签名证书

填写与重复填写ca证书密码。实际填写的时候是输入的字符是看不见的。

openssl req -newkey rsa:2048 -keyout ca_rsa_private.pem -x509 -days 365 -out ca.pem
  • 填写其他信息, 不填的话使用 “.”

生成ca签名证书

  1. 生成公私密钥。提供给客户端-服务端加密传输使用
openssl req -newkey rsa:2048 -keyout server_rsa.key -out server.csr

Generating a 2048 bit RSA private key

生成加密密钥对

  1. 生成Namesrv、Broker加密密钥对,并且签发Namesrv、Broker证书
openssl req -newkey rsa:2048 -keyout server_rsa.key -out server.csrGenerating a 2048 bit RSA private key

生成Namesrv、Broker密钥,签发证书

  1. 打包并加密Namesrv、Broker私钥

  1. 添加Namesrv、Broker使用的tls配置文件
  • tls-broker.properties
tls.test.mode.enable=false
tls.server.need.client.auth=none
tls.server.keyPath=/etc/rocketmq/server.key
tls.server.keyPassword=123456
tls.server.certPath=/etc/rocketmq/server.pem
tls.client.authServer=false
tls.client.trustCertPath=/etc/rocketmq/ca.pem
  • tls-namesrv.properties
tls.test.mode.enable=false
tls.server.need.client.auth=none
tls.server.keyPath=/etc/rocketmq/server.key
tls.server.keyPassword=123456
tls.server.certPath=/etc/rocketmq/server.pem
  • tls-client.properties
tls.client.trustCertPath=/etc/rocketmq/ca.pem

至此,我们得到了全部的tls配置文件:

全部配置文件

03 修改启动脚本

3.1 修改namesrv启动脚本

vim bin/runserver.sh

修改namesrv启动脚本

3.2 修改broker启动配置

  • 修改broker启动脚本, 设置jvm支持tls
vim bin/runbroker.sh

修改broker启动脚本

  • 添加broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr = 127.0.0.1:9876

3.3 修改dashboard配置

  • 修改namesrv地址

修改namesrv地址

  • 打开tls开关
vim rocketmq-dashboard-1.0.1-SNAPSHOT.jar

修改dashboard配置

说明:如果是客户端生产消费,设置如下

消费者开启tls开关

生产者开启tls开关

04 启动Namesrv,Broker,Dashboard

  • 启动namesrv
nohup sh bin/mqnamesrv &
  • 启动broker
nohup sh bin/mqbroker -c conf/broker.conf &
  • 启动dashboard
java -Dtls.client.authServer=true -Dtls.enable=true -Dtls.test.mode.enable=false -Dtls.config.file=/etc/rocketmq/tls-client.properties -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar

05 验证

  • tcpdump抓包验证

TLS抓包结果

  • rocketmq dashboad日志验证: ~/logs/rocketmqlogs/rocketmq_client.log

06 问题:抓包结果中, 为什么还有TCP协议呢?

  • 抓包结果中, 为什么还有TCP协议呢?

  • 客户端可以通过设置:-Dtls.enable=true开启, 但是实际还是需要设置代码"producer.setUseTLS(useTls);" 或者 “consumer.setUseTLS(useTls);”, 为什么?

07 看看生成的最终文件到底是什么?

  • ca.pemca根证书

  • ca_rsa_private.pemca根证书的加密私钥

  • server.pem使用跟证书签发的Namesrv、Broker的证书

  • server_rsa.keyNamesrv、Broker的加密私钥

  • server.csrNamesrv、Broker的加密证书的公钥和用于辨别证书迁移机构的名称信息

  • server.key打包并加密后的Namesrv、Broker的私钥(server_rsa.key)

  • ca.srlca签发证书的序列号

1、tls-namesrv.properties

内容见上文, 是namesrv中netty识别的tls加密传输的配置

2、tls-broker.properties

内容见上文, 是broker中netty识别的tls加密传输的配置

3、tls-client.properties

内容见上文, 是client中netty识别的tls加密传输的配置

PS:RocketMQ的tls配置4.X版本和5.X版本差不多, 基本都可以用。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
5天前
|
jenkins 应用服务中间件 持续交付
如何配置 Nginx 作为 Jenkins 的反向代理并启用 SSL 加密
如何配置 Nginx 作为 Jenkins 的反向代理并启用 SSL 加密
25 8
|
1月前
|
消息中间件 PHP 数据安全/隐私保护
docker安装rabbitmq并配置hyperf使用
通过以上步骤,您可以实现在Docker容器中安装和配置RabbitMQ,并在PHP的Hyperf框架中进行集成和使用。这种方式为开发者提供了快速部署并实现消息队列解决方案的能力,同时维持了环境与生产环境的一致性,从而为开发高效的分布式应用程序提供了便利。
37 3
docker安装rabbitmq并配置hyperf使用
|
20天前
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
45 10
|
22天前
|
消息中间件 传感器 负载均衡
消息队列 MQ使用问题之如何配置一主一从的同步复制模式
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
消息队列 MQ使用问题之如何配置一主一从的同步复制模式
|
4天前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
20 0
|
26天前
|
消息中间件 Kafka
面试题Kafka问题之RabbitMQ的路由配置工作如何解决
面试题Kafka问题之RabbitMQ的路由配置工作如何解决
37 1
|
22天前
|
消息中间件 运维 Go
消息队列 MQ使用问题之如何配置生产环境
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
2月前
|
存储 安全 API
使用KMS为Apollo配置中心敏感配置加密的最佳实践
使用KMS为Apollo配置中心敏感配置加密的最佳实践
296 2
|
1月前
|
安全 算法 Java
Java中的数据加密与安全传输
Java中的数据加密与安全传输
|
2月前
|
消息中间件 Java RocketMQ
教程:Spring Boot整合RocketMQ的配置与优化
教程:Spring Boot整合RocketMQ的配置与优化