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 证书密码。实际填写的时候是输入的字符是看不见的。
填写其他信息, 不填的话使用 “.”

生成 ca 签名证书
2. 生成公私密钥。提供给客户端-服务端加密传输使用
Generating a 2048 bit RSA private key

生成加密密钥对
3. 生成 Namesrv、Broker 加密密钥对,并且签发 Namesrv、Broker 证书

生成 Namesrv、Broker 密钥,签发证书
4. 打包并加密 Namesrv、Broker 私钥

5. 添加 Namesrv、Broker 使用的 tls 配置文件
tls-broker.properties
tls-namesrv.properties
tls-client.properties
至此,我们得到了全部的 tls 配置文件:

全部配置文件
03 修改启动脚本
3.1 修改 namesrv 启动脚本

修改 namesrv 启动脚本
3.2 修改 broker 启动配置
修改 broker 启动脚本, 设置 jvm 支持 tls

修改 broker 启动脚本
添加 broker.conf
3.3 修改 dashboard 配置
修改 namesrv 地址

修改 namesrv 地址
打开 tls 开关

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

消费者开启 tls 开关

生产者开启 tls 开关
04 启动 Namesrv,Broker,Dashboard
启动 namesrv
启动 broker
启动 dashboard
05 验证
tcpdump 抓包验证

TLS 抓包结果
rocketmq dashboad 日志验证: ~/logs/rocketmqlogs/rocketmq_client.log

添加图片注释,不超过 140 字(可选)
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 版本差不多, 基本都可以用。
评论