文档

启用 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();      
  • 本页导读 (0)