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或者客户端可以是其他的机器
2.1. 生成ca签名证书
openssl req -newkey rsa:2048 -keyout ca_rsa_private.pem -x509 -days 365 -out ca.pem
2.2 生成公私密钥。提供给客户端-服务端加密传输使用
openssl req -newkey rsa:2048 -keyout server_rsa.key -out server.csr
Generating a 2048 bit RSA private key
2.3. 生成Namesrv、Broker加密密钥对,并且签发Namesrv、Broker证书
openssl req -newkey rsa:2048 -keyout server_rsa.key -out server.csr
Generating a 2048 bit RSA private key
2.4. 打包并加密Namesrv、Broker私钥
2.5. 添加Namesrv、Broker使用的tls配置文件
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.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.trustCertPath=/etc/rocketmq/ca.pem
至此,我们得到了全部的tls配置文件:
3. 修改启动脚本
3.1. 修改namesrv启动脚本
vim bin/runserver.sh
3.2 修改broker启动配置
3.2.1 修改broker启动脚本, 设置jvm支持tls
vim bin/runbroker.sh
3.2.2 添加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配置
3.3.1 修改namesrv地址
3.3.2 打开tls开关
vim rocketmq-dashboard-1.0.1-SNAPSHOT.jar
说明:如果是客户端生产消费,设置如下:
4. 启动Namesrv,Broker,Dashboard
4.1. 启动namesrv
nohup sh bin/mqnamesrv &
4.2. 启动broker
nohup sh bin/mqbroker -c conf/broker.conf &
4.3. 启动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
5. tcpdump抓包验证
6. 问题
大家可以留言说说看!
7. 看看生成的最终文件到底是什么?
1. ca.pem
ca根证书
2. ca_rsa_private.pem
ca根证书的加密私钥
3. server.pem
使用跟证书签发的Namesrv、Broker的证书
4. server_rsa.key
Namesrv、Broker的加密私钥
5. server.csr
Namesrv、Broker的加密证书的公钥和用于辨别证书迁移机构的名称信息,
6. server.key
打包并加密后的Namesrv、Broker的私钥(server_rsa.key)
7. ca.srl
ca签发证书的序列号
8. tls-namesrv.properties
内容见上文, 是namesrv中netty识别的tls加密传输的配置
9. tls-broker.properties
内容见上文, 是broker中netty识别的tls加密传输的配置
10. tls-client.properties
内容见上文, 是client中netty识别的tls加密传输的配置
PS:RocketMQ的tls配置4.X版本和5.X版本差不多, 基本都可以用。