启用 TLS 通信加密

为了保证通信的安全性,消息的生产和消费要支持 TLS 加密。对于金融系统而言,信息安全尤为重要,而 TLS 加密是比较公认的通信安全加密方式,具备 TLS 通信加密能力且易于使用,是 SOFAMQ 必备的能力。本文介绍使用 TLS 消息加密的操作指导。

重要

NameServer、Broker、Client 的认证证书 CA 要保持一致。

配置 NameServer

  1. 准备工作。

    确认 NameServer 是否安装 OpenSSL。推荐安装,可使用 openssl version 命令查看。

  2. 生成证书。

    以 OpenSSL 方式为例生成证书,步骤如下:

    说明

    执行以下命令,过程中均要输入密码,本示例中均使用 123456。

    1. 安装认证证书 CA。本文列出以下两种安装方式:

      • 从专门的证书机构申请(推荐)。

      • 生成自签名根证书。

        文件可命名为 ca.crt。步骤如下:

        1. 生成 CA 密钥。

          openssl genrsa -des3 -out ca.key 2048
        2. 生成证书请求文件。

          openssl req -new -out ca.csr -key ca.key -keyform PEM -subj "/C=CN/ST=省/L=城市/O=单位/OU=部门/CN=域名或ip"
        3. 生成自签名根证书。

          openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt -CAcreateserial
    2. 生成应用公私密钥对,命令示例如下。

      openssl genrsa -des3 -out server.pem 2048 

      文件可命名为 server.pem

    3. 生成证书签名请求文件,命令示例如下。

      openssl req -new -key server.pem -out server.csr -subj "/C=CN/ST=省/L=城市/O=单位/OU=部门/CN=域名或ip"

      文件可命名为 server.csr

    4. 使用 CA 签名生成应用证书,命令示例如下。

      openssl x509 -req -in server.csr -out server.crt -signkey server.pem -CA ca.crt -CAkey ca.key -days 365 -CAcreateserial

      文件可命名为 server.crt

  3. 配置 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 目录下,该目录正常情况下不会被清理。

  4. 设置环境变量。参数说明如下:

    配置项

    说明

    默认值

    tls.server.mode

    枚举值如下:

    • Disable:不支持加密。

    • Permissive:兼容模式。

    • Enforcing:强制加密。

    Permissive

    tls.config.file

    tls.properties 文件路径。

    /etc/rocketmq/tls.properties

    说明

    如果使用云游部署,tls.properties 路径已固定为 /home/admin/store/ca/tls.properties

  5. 重启 NameServer。

配置 Broker

  1. 准备工作。

    确认 Broker 是否安装 OpenSSL。推荐安装,可使用 openssl version 命令查看。

  2. 生成证书。

    以 OpenSSL 方式为例生成证书,步骤如下:

    说明

    执行以下命令,过程中均要输入密码,本示例中均使用 123456。

    1. 安装认证证书 CA。本文列出以下两种安装方式:

      • 从专门的证书机构申请(推荐)。

      • 自签名生成根证书。

        文件可命名为 ca.crt。生成根证书命令,可参考 NameServer 自签名根证书

    2. 生成服务端应用公私密钥对,命令示例如下。

      openssl genrsa -des3 -out server.pem 2048 

      文件可命名为 server.pem

    3. 生成服务端证书签名请求文件,命令示例如下。

      openssl req -new -key server.pem -out server.csr -subj "/C=CN/ST=省/L=城市/O=单位/OU=部门/CN=域名或ip"

      文件可命名为 server.csr

    4. 使用 CA 签名生成服务端应用证书,命令示例如下。

      openssl x509 -req -in server.csr -out server.crt -signkey server.pem -CA ca.crt -CAkey ca.key -days 365 -CAcreateserial

      文件可命名为 server.crt

    5. 生成客户端应用公私密钥对,命令示例如下。

      openssl genrsa -des3 -out client.pem 2048    
      

      文件可命名为 client.pem

    6. 生成客户端证书签名请求文件,命令示例如下。

      openssl req -new -key client.pem -out client.csr -subj "/C=CN/ST=省/L=城市/O=单位/OU=部门/CN=域名或ip"
      

      文件可命名为 client.csr

    7. 使用 CA 签名生成客户端应用证书,命令示例如下。

      openssl x509 -req -in client.csr -out client.crt -signkey client.pem -CA ca.crt -CAkey ca.key -days 365 -CAcreateserial
      

      文件可命名为 client.crt

  3. 配置 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 目录下,该目录在正常情况下不会被清理。

  4. 设置环境变量。参数说明如下:

    配置项

    说明

    默认值

    tls.server.mode

    枚举值如下:

    • Disable:不支持加密。

    • Permissive:兼容模式。

    • Enforcing:强制加密。

    Permissive

    tls.config.file

    tls.properties 文件路径。

    /etc/rocketmq/tls.properties

    说明

    如果使用云游部署,tls.properties 路径已固定为 /home/admin/store/ca/tls.properties

  5. 重启 Broker。

配置 Client

  1. 准备工作。

    通过查看 Client 端 sofamq-client jar 包版本,确认当前 sofamq-client 的版本不低于 3.1.6.1。

  2. 生成证书。

    以 OpenSSL 方式为例生成证书,步骤如下:

    说明

    执行以下命令,过程中均要输入密码,本示例中均使用 123456。

    1. 安装认证证书 CA。本文列出以下两种安装方式:

      • 从专门的证书机构申请(推荐)。

      • 自签名生成根证书。

        文件可命名为 ca.crt。生成根证书命令,可参考 NameServer 自签名根证书

    2. 生成应用公私密钥对。命令示例如下。

      openssl genrsa -des3 -out client.pem 2048    

      文件可命名为 client.pem

    3. 生成证书签名请求文件。命令示例如下。

      openssl req -new -key client.pem -out client.csr -subj "/C=CN/ST=省/L=城市/O=单位/OU=部门/CN=域名或ip"
      

      文件可命名为 client.csr

    4. 使用 CA 签名生成应用证书。命令示例如下。

      openssl x509 -req -in client.csr -out client.crt -signkey client.pem -CA ca.crt -CAkey ca.key -days 365 -CAcreateserial

      文件可命名为 client.crt

  3. 配置 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

    -

  4. 设置环境变量。参数说明如下:

    配置项

    说明

    默认值

    tls.config.file

    tls.properties 文件路径。

    /etc/rocketmq/tls.properties

    tls.enable

    Client 是否开启加密。

    false

  5. 重启 Client。

    开启 Client TLS 前请务必确保 Broker TLS 和 NameServer TLS 已开启。

  6. 创建 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();