写点什么

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

作者:Apache RocketMQ
  • 2023-05-19
    陕西
  • 本文字数:1745 字

    阅读完需:约 6 分钟

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 签名证书


2. 生成公私密钥。提供给客户端-服务端加密传输使用

openssl req -newkey rsa:2048 -keyout server_rsa.key -out server.csr
复制代码

Generating a 2048 bit RSA private key


生成加密密钥对


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

openssl req -newkey rsa:2048 -keyout server_rsa.key -out server.csrGenerating a 2048 bit RSA private key
复制代码


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


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

5. 添加 Namesrv、Broker 使用的 tls 配置文件

  • tls-broker.properties

tls.test.mode.enable=falsetls.server.need.client.auth=nonetls.server.keyPath=/etc/rocketmq/server.keytls.server.keyPassword=123456tls.server.certPath=/etc/rocketmq/server.pemtls.client.authServer=falsetls.client.trustCertPath=/etc/rocketmq/ca.pem
复制代码
  • tls-namesrv.properties

tls.test.mode.enable=falsetls.server.need.client.auth=nonetls.server.keyPath=/etc/rocketmq/server.keytls.server.keyPassword=123456tls.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 = DefaultClusterbrokerName = broker-abrokerId = 0deleteWhen = 04fileReservedTime = 48brokerRole = ASYNC_MASTERflushDiskType = ASYNC_FLUSHnamesrvAddr = 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

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

用户头像

Apache RocketMQ 官方 2022-11-09 加入

帮助更多企业、更多开发者来学习、了解、体验Apache RocketMQ~

评论

发布
暂无评论
RocketMQ 5.0 如何配置TLS加密传输?_消息列队_Apache RocketMQ_InfoQ写作社区