为了保证通信的安全性,消息的生产和消费要支持 TLS 加密。对于金融系统而言,信息安全尤为重要,而 TLS 加密是比较公认的通信安全加密方式,具备 TLS 通信加密能力且易于使用,是 SOFAMQ 必备的能力。本文介绍使用 TLS 消息加密的操作指导。
NameServer、Broker、Client 的认证证书 CA 要保持一致。
配置 NameServer
准备工作。
确认 NameServer 是否安装 OpenSSL。推荐安装,可使用
openssl version
命令查看。生成证书。
以 OpenSSL 方式为例生成证书,步骤如下:
说明执行以下命令,过程中均要输入密码,本示例中均使用 123456。
安装认证证书 CA。本文列出以下两种安装方式:
从专门的证书机构申请(推荐)。
生成自签名根证书。
文件可命名为
ca.crt
。步骤如下:生成 CA 密钥。
openssl genrsa -des3 -out ca.key 2048
生成证书请求文件。
openssl req -new -out ca.csr -key ca.key -keyform PEM -subj "/C=CN/ST=省/L=城市/O=单位/OU=部门/CN=域名或ip"
生成自签名根证书。
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt -CAcreateserial
生成应用公私密钥对,命令示例如下。
openssl genrsa -des3 -out server.pem 2048
文件可命名为
server.pem
。生成证书签名请求文件,命令示例如下。
openssl req -new -key server.pem -out server.csr -subj "/C=CN/ST=省/L=城市/O=单位/OU=部门/CN=域名或ip"
文件可命名为
server.csr
。使用 CA 签名生成应用证书,命令示例如下。
openssl x509 -req -in server.csr -out server.crt -signkey server.pem -CA ca.crt -CAkey ca.key -days 365 -CAcreateserial
文件可命名为
server.crt
。
配置
tls.properties
配置文件。参数说明如下:配置项
说明
示例值
建议值
tls.test.mode.enable
是否使用测试模式。
false
false
tls.server.need.client.auth
服务端是否请求客户端证书。
optional
optional
tls.server.keyPath
服务端私钥文件路径。
/home/admin/store/ca/server.pem
-
tls.server.keyPassword
服务端私钥文件访问密码。
123456
-
tls.server.certPath
服务端应用证书路径。
/home/admin/store/ca/server.crt
-
tls.server.authClient
服务端是否认证客户端。
true
true
tls.server.trustCertPath
服务端认证证书路径。
/home/admin/store/ca/ca.crt
-
重要证书建议安装在
/home/admin/store
目录下,该目录正常情况下不会被清理。设置环境变量。参数说明如下:
配置项
说明
默认值
tls.server.mode
枚举值如下:
Disable:不支持加密。
Permissive:兼容模式。
Enforcing:强制加密。
Permissive
tls.config.file
tls.properties 文件路径。
/etc/rocketmq/tls.properties
说明如果使用云游部署,tls.properties 路径已固定为
/home/admin/store/ca/tls.properties
。重启 NameServer。
配置 Broker
准备工作。
确认 Broker 是否安装 OpenSSL。推荐安装,可使用
openssl version
命令查看。生成证书。
以 OpenSSL 方式为例生成证书,步骤如下:
说明执行以下命令,过程中均要输入密码,本示例中均使用 123456。
安装认证证书 CA。本文列出以下两种安装方式:
从专门的证书机构申请(推荐)。
自签名生成根证书。
文件可命名为
ca.crt
。生成根证书命令,可参考 NameServer 自签名根证书。
生成服务端应用公私密钥对,命令示例如下。
openssl genrsa -des3 -out server.pem 2048
文件可命名为
server.pem
。生成服务端证书签名请求文件,命令示例如下。
openssl req -new -key server.pem -out server.csr -subj "/C=CN/ST=省/L=城市/O=单位/OU=部门/CN=域名或ip"
文件可命名为
server.csr
。使用 CA 签名生成服务端应用证书,命令示例如下。
openssl x509 -req -in server.csr -out server.crt -signkey server.pem -CA ca.crt -CAkey ca.key -days 365 -CAcreateserial
文件可命名为
server.crt
。生成客户端应用公私密钥对,命令示例如下。
openssl genrsa -des3 -out client.pem 2048
文件可命名为
client.pem
。生成客户端证书签名请求文件,命令示例如下。
openssl req -new -key client.pem -out client.csr -subj "/C=CN/ST=省/L=城市/O=单位/OU=部门/CN=域名或ip"
文件可命名为
client.csr
。使用 CA 签名生成客户端应用证书,命令示例如下。
openssl x509 -req -in client.csr -out client.crt -signkey client.pem -CA ca.crt -CAkey ca.key -days 365 -CAcreateserial
文件可命名为
client.crt
。
配置
tls.properties
配置文件。参数说明如下:配置项
说明
示例值
建议值
tls.test.mode.enable
是否使用测试模式。
false
false
tls.server.need.client.auth
服务端是否请求客户端证书。
optional
optional
tls.server.keyPath
服务端私钥文件路径。
/home/admin/store/ca/server.pem
-
tls.server.keyPassword
服务端私钥文件访问密码。
123456
-
tls.server.certPath
服务端应用证书路径。
/home/admin/store/ca/server.crt
-
tls.server.authClient
服务端是否认证客户端。
true
true
tls.server.trustCertPath
服务端认证证书路径。
/home/admin/store/ca/ca.crt
-
tls.client.keyPath
客户端私钥文件路径。
/home/admin/store/ca/client.pem
-
tls.client.keyPassword
客户端私钥文件访问密码。
Abc123456
-
tls.client.certPath
客户端应用证书路径。
/home/admin/store/ca/client.crt
-
tls.client.authServer
客户是否认证服务端。
true
true
tls.client.trustCertPath
客户端认证证书路径。
/home/admin/store/ca/ca.crt
-
重要建议将证书安装在
/home/admin/store
目录下,该目录在正常情况下不会被清理。设置环境变量。参数说明如下:
配置项
说明
默认值
tls.server.mode
枚举值如下:
Disable:不支持加密。
Permissive:兼容模式。
Enforcing:强制加密。
Permissive
tls.config.file
tls.properties 文件路径。
/etc/rocketmq/tls.properties
说明如果使用云游部署,tls.properties 路径已固定为
/home/admin/store/ca/tls.properties
。重启 Broker。
配置 Client
准备工作。
通过查看 Client 端 sofamq-client jar 包版本,确认当前 sofamq-client 的版本不低于 3.1.6.1。
生成证书。
以 OpenSSL 方式为例生成证书,步骤如下:
说明执行以下命令,过程中均要输入密码,本示例中均使用 123456。
安装认证证书 CA。本文列出以下两种安装方式:
从专门的证书机构申请(推荐)。
自签名生成根证书。
文件可命名为
ca.crt
。生成根证书命令,可参考 NameServer 自签名根证书。
生成应用公私密钥对。命令示例如下。
openssl genrsa -des3 -out client.pem 2048
文件可命名为
client.pem
。生成证书签名请求文件。命令示例如下。
openssl req -new -key client.pem -out client.csr -subj "/C=CN/ST=省/L=城市/O=单位/OU=部门/CN=域名或ip"
文件可命名为
client.csr
。使用 CA 签名生成应用证书。命令示例如下。
openssl x509 -req -in client.csr -out client.crt -signkey client.pem -CA ca.crt -CAkey ca.key -days 365 -CAcreateserial
文件可命名为
client.crt
。
配置
tls.properties
配置文件。参数说明如下:配置项
说明
示例值
建议值
tls.test.mode.enable
是否使用测试模式。
false
false
tls.client.keyPath
客户端私钥文件路径。
/home/admin/store/ca/client.pem
-
tls.client.keyPassword
客户端私钥文件访问密码。
123456
-
tls.client.certPath
客户端应用证书路径。
/home/admin/store/ca/client.crt
-
tls.client.authServer
客户是否认证服务端。
true
true
tls.client.trustCertPath
客户端认证证书路径。
/home/admin/store/ca/ca.crt
-
设置环境变量。参数说明如下:
配置项
说明
默认值
tls.config.file
tls.properties 文件路径。
/etc/rocketmq/tls.properties
tls.enable
Client 是否开启加密。
false
重启 Client。
开启 Client TLS 前请务必确保 Broker TLS 和 NameServer TLS 已开启。
创建 Producer 或 Consumer 实例时指定是否加密(可选)。
通过环境变量
tls.enable
指定默认是否加密。但 API 的优先级更高。API 示例如下:
Properties properties = new Properties(); properties.setProperty(PropertyKeyConst.GROUP_ID, "GID_LFQ"); properties.setProperty(PropertyKeyConst.USE_TLS, "true"); // 开启加密 Producer producer = AccessPoint.getAccessPoint().createProducer(properties); producer.start();