前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RocketMQ 5.0 如何配置TLS加密传输?

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

原创
作者头像
小伟
修改2023-05-24 16:39:32
1.1K0
修改2023-05-24 16:39:32
举报
文章被收录于专栏:魔都程序缘魔都程序缘

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

代码语言:shell
复制
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca_rsa_private.pem -CAcreateserial -out server.pem
生成Namesrv、Broker密钥,签发证书
生成Namesrv、Broker密钥,签发证书

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

代码语言:text
复制
 openssl pkcs8 -topk8 -v1 PBE-SHA1-RC4-128 -in server_rsa.key -out server.key

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

代码语言:txt
复制
- tls-namesrv.properties

```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

代码语言:txt
复制
- tls-client.properties

```properties

tls.client.trustCertPath=/etc/rocketmq/ca.pem

代码语言:txt
复制
至此,我们得到了全部的tls配置文件:

![全部配置文件](https://ask.qcloudimg.com/developer-images/article/1137178/3pa0uyow74.png)

## 3. 修改启动脚本

### 3.1 修改namesrv启动脚本

```bash

vim bin/runserver.sh

代码语言:txt
复制
![修改namesrv启动脚本](https://ask.qcloudimg.com/developer-images/article/1137178/z08ps3x6wq.png)

### 3.2 修改broker启动配置

1. 修改broker启动脚本, 设置jvm支持tls

```bash

vim bin/runbroker.sh

代码语言:txt
复制
![修改broker启动脚本](https://ask.qcloudimg.com/developer-images/article/1137178/cxu8b2t33y.png)

1. 添加broker.conf

```properties

brokerClusterName = DefaultCluster

brokerName = broker-a

brokerId = 0

deleteWhen = 04

fileReservedTime = 48

brokerRole = ASYNC_MASTER

flushDiskType = ASYNC_FLUSH

namesrvAddr = 127.0.0.1:9876

代码语言:txt
复制
### 3.3 修改dashboard配置

- 修改namesrv地址
![修改namesrv地址](https://ask.qcloudimg.com/developer-images/article/1137178/l2qwj8cu1n.png)
- 打开tls开关

```bash

vim rocketmq-dashboard-1.0.1-SNAPSHOT.jar

代码语言:txt
复制
![修改dashboard配置](https://ask.qcloudimg.com/developer-images/article/1137178/hmehhuimal.png)

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

![消费者开启tls开关](https://ask.qcloudimg.com/developer-images/article/1137178/aqh06aw42f.png)

![生产者开启tls开关](https://ask.qcloudimg.com/developer-images/article/1137178/rs3lhl470a.png)

## 4. 启动Namesrv,Broker,Dashboard

1. 启动namesrv

```bash

nohup sh bin/mqnamesrv &

代码语言:txt
复制
1. 启动broker

```bash

nohup sh bin/mqbroker -c conf/broker.conf &

代码语言:txt
复制
1. 启动dashboard

```bash

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

代码语言:txt
复制

5. 验证

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

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

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

大家可以留言说说看!

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

  1. ca.pem ca根证书
  2. ca_rsa_private.pem ca根证书的加密私钥
  3. server.pem 使用跟证书签发的Namesrv、Broker的证书
  1. server_rsa.key Namesrv、Broker的加密私钥
  1. server.csr Namesrv、Broker的加密证书的公钥和用于辨别证书迁移机构的名称信息,
  1. server.key 打包并加密后的Namesrv、Broker的私钥(server_rsa.key)
  1. ca.srl ca签发证书的序列号
  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版本差不多, 基本都可以用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01 传输架构图
  • 02 准备Namesrv、Broker、Client的ca证书、密钥。
    • 1. 生成ca签名证书
      • 2. 生成公私密钥。提供给客户端-服务端加密传输使用
        • 3. 生成Namesrv、Broker加密密钥对,并且签发Namesrv、Broker证书
          • 4. 打包并加密Namesrv、Broker私钥
          • 5. 验证
          • 6. 问题:抓包结果中, 为什么还有TCP协议呢?
          • 7. 看看生成的最终文件到底是什么?
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档