IBM Cloud Docs
使用 runmqsc 确保远程管理安全

使用 runmqsc 确保远程管理安全

本文档描述了使用 runmqsc 命令行界面为 MQ on Cloud 队列管理器的远程管理启用 TLS 的过程。

开始之前

  1. 如果队列管理器为 V9.2.1 修订版 1 或更低版本,那么必须首先在 MQ 通道上配置 TLS 安全性。 对于较新版本,缺省情况下将使用 ANY_TLS12_OR_HIGHER 密码启用 TLS。
    • 有关如何启用 TLS 的详细信息,请参阅 在 MQ on Cloud中为 MQ 通道启用 TLS 安全性
    • 对于本主题,我们假定 CLOUD.ADMIN.SVRCONN 通道已配置为使用 cipherspec ANY_TLS12_OR_HIGHER和 SSL 认证 (SSLCAUTH) 作为可选
    • 本主题末尾的附加部分描述了如何扩展 TLS 配置以支持 runmqsc 客户机的相互 TLS 认证
  2. 本主题描述了使用 JSON 格式 CCDT 来指示 runmqsc 如何连接到队列管理器
    • 要使用 JSON 格式 CCDT,您必须具有 IBM MQ V9.1.2 或更高版本的 runmqsc 安装。 V9.1.2 之前的 runmqsc 版本不支持 JSON 格式 CCDT
    • 您还可以使用二进制 CCDT 将 runmqsc 连接到队列管理器(如果需要),但此处提供的指示信息专用于 JSON CCDT
  3. 要配置客户机密钥库文件,您将需要诸如 runmqakm 之类的工具
    • 在 IBM MQ 的完全安装或您操作系统的 MQ 客户机安装中提供了这些工具
    • " MQ 下载 " 页面提供了完整安装和客户机安装
    • 还有一个 MacOS Toolkit for Developers 客户机,允许在 MacOS 上本机使用 runmqsc

配置 runmqsc 以使用标准 ("单向") TLS 连接

下载或创建用于描述要连接到的队列管理器的 JSON CCDT 文件

您可以在队列管理器详细信息页面中,通过单击“连接信息”按钮,然后选择“JSON CCDT”格式来下载 JSON CCDT。 请注意,下载的 JSON CCDT 不包含与通道关联的密码规范,因此必须通过为每个通道添加一个 transmissionSecurity 定义来手动包含密码规范,如以下示例中所示。

或者,可以直接复制此处提供的示例模板,并更新 host、port、queueManager 和 channel 值以匹配您的队列管理器。

{
  "channel": [
  {
    "name": "CLOUD.ADMIN.SVRCONN",
    "clientConnection": {
      "connection": [
      {
      "host": "qm1-1234.qm.us-south.mq.appdomain.cloud",
      "port": 31500
      }
      ],
      "queueManager": "QM1"
    },
    "transmissionSecurity": {
      "cipherSpecification": "ANY_TLS12_OR_HIGHER"
    },
    "type": "clientConnection"
  }
  ]
}

以上 JSON CCDT 示例中的密码规范已指定为 ANY_TLS12_OR_HIGHER,这允许 runmqsc 客户机根据通道配置为允许的密码与 TLS v1.2 密码系列中的队列管理器协商允许的密码。 为了获得最大灵活性,还可以将队列管理器通道配置为 ANY_TLS12_OR_HIGHER ,这允许客户机与服务器之间进行协商。

为 runmqsc 环境配置必需的环境变量

我们将配置环境变量,以指示 runmqsc 客户机使用 JSON CCDT 来获取队列管理器连接详细信息,其中包含在上一步中定义的通道密码规范的名称。

  1. 打开命令提示符窗口并浏览至安装的 MQ bin 目录。 此目录的位置取决于您的操作系统,例如:

    表 1. 不同操作系统的安装文件位置
    操作系统 文件位置
    Linux 完整 MQ 安装 /var/mqm/bin
    Windows C:\Program Files\IBM\MQ\bin
    Linux/Mac ,使用客户机安装 ~/mytoolkit/IBM-MQ-Toolkit-Mac-x64-9.1.2.0/bin
  2. 设置 MQCCDTURL 环境变量以指示 runmqsc 客户机读取 JSON CCDT , MQCCDTURL 变量是指向 JSON CCDT 文件的 URL。

    • MQCCCDTURL 是从系统根到 ccdt 文件的完整文件路径。

      # Linux/MacOS
      export MQCCDTURL=file:///Users/myuser/connection_info_ccdt.json    
      unset MQSERVER
      
      # Windows
      set MQCCDTURL=file:///c:/temp/connection_info_ccdt.json    
      set MQSERVER=        
      

      MUST NOT 设置了 MQSERVER 变量,否则将优先于 JSON CCDT 中的设置

    • 指定 CCDT 文件位置有两种不同的方法-如果 MQCCDTURL 不适用于您,请尝试设置 MQCHLTAB 和 MQCHLLIB ,如下所述。

      MQCHLLIB 是从系统根目录到保存 ccdt 文件的目录的完整路径。

      export MQCHLLIB=/path/to/ccdt
      set MQCHLLIB=c:\path\to\ccdt
      

      MQCHLTAB 是 ccdt 文件的文件名。

      export MQCHLTAB=connection_info_ccdt.json
      set MQCHLTAB=connection_info_ccdt.json
      
  3. 设置 MQSSLKEYR 环境变量以允许 runmqsc 客户机信任队列管理器提供的 TLS 证书

    MQSSLKEYR 变量必须设置为从系统根目录到包含队列管理器提供的 TLS 证书的密钥库文件的完整路径。

    如果您还没有密钥库文件,那么可以按照创建密钥库主题中所述来创建密钥库文件,密钥库包含从服务控制台用户界面下载的队列管理器公用证书。

    请注意,文件的 .kdb 后缀不得包含在 MQSSLKEYR 值中,因此对于名为 key.kdb的密钥库,请仅指定 key

    # Linux/MacOS
    export MQSSLKEYR=/Users/myuser/key
    
    # Windows
    set MQSSLKEYR=c:\temp\key
    

执行 runmqsc 命令以连接到队列管理器

现在,我们已设置了必要的环境,可以执行 runmqsc 命令来连接到队列管理器。

正常情况下,您将需要对 runmqsc 命令输入以下内容:

  • MQ 管理员用户名和 API 密钥,可通过服务控制台获取,如收集必需的连接详细信息中所述。 请注意,这必须是管理员用户名和 API 密钥,而不是应用程序用户名和 API 密钥
  • 队列管理器名称,必须与 JSON CCDT 文件中指定的名称相匹配,例如“QM1”
<Path to MQ/bin directory>/runmqsc -c -u mqusername QM1

此 runmqsc 上的所有操作现在都将在安全通道上运行。

配置 runmqsc 使用相互(“双向”)TLS 连接

以下步骤描述了如何扩展上面的指示信息,以配置 runmqsc 客户机与队列管理器之间的相互 TLS 连接。

在相互 TLS 场景中,客户机(例如 runmqsc)向队列管理器提供客户机证书,并且必须将队列管理器配置为信任该入局客户机证书。

  1. 生成将标识 runmqsc 客户机的 TLS 客户机证书:

    在一些组织中,中央认证中心 (CA) 会为您生成 TLS 客户机证书。 为了本示例的目的,我们将生成自己的自签名客户机证书。

    # Generate a new private key and public certificate for the client
    # (fill in the segments of the certificate as you wish when prompted)
    openssl req -newkey rsa:2048 -nodes -keyout clientKey.pem -x509 -days 365 -out clientCert.pem
    
    # Combine the private key and public certificate into a single file
    cat clientKey.pem > clientCombined.pem
    cat clientCert.pem >> clientCombined.pem
    
  2. 将新生成的客户机证书添加到本地密钥库文件:

    将组合的客户机密钥/证书导入到密钥库文件,并记下您使用的标签。

    runmqakm -cert -add -db key.kdb -file clientCombined.pem -label runmqsc -stashed -type pkcs12 -format ascii
    
  3. 配置队列管理器以信任客户机证书:

    • 通过导航至 MQ on Cloud 服务控制台用户界面中的队列管理器详细信息页面,然后选择“信任库”选项卡,导入客户机证书的公共部分
    • 单击“导入证书”按钮,然后选择包含客户机证书公共部分的文件,例如 clientCert.pem
    • 单击“下一步”并选取证书标签(此标签不必与客户机密钥库文件中的标签相同),然后单击“保存”
    • 上传证书后,系统将请求您刷新队列管理器 SSL 安全配置,您可以使用 MQ 控制台、MQ 资源管理器或 runmqsc 来执行此操作,如此处所述
  4. 将队列管理器通道配置为需要相互 TLS:

    • 通道的 TLS 方式由通道的 SSL Authentication 属性控制,该属性必须设置为 Required 才能启用相互 TLS。 可以使用 MQ 控制台或 MQ Explorer 通过 UI 设置属性,或者如果使用的是 runmqsc ,那么必须将属性 SSLCAUTH 设置为 REQUIRED
  5. 配置 runmqsc 以在连接到队列管理器时提供客户机证书:

    • MQCERTLABL 环境变量设置为本地密钥库文件中客户机证书的标签,然后可以执行 runmqsc 命令以连接到队列管理器,此时间将使用相互 TLS 认证进行配置。
    export MQCERTLABL=runmqsc
    runmqsc -c -u mqusername QM1
    

后续步骤

如果想要将应用程序连接到在通道上启用了 TLS 的队列管理器,那么可以按照以下主题中的指示信息进行操作: