使用 runmqsc 确保远程管理安全

本主题介绍了如何启用 TLS ,以便通过 runmqsc 命令对队列管理器 IBM® MQ as a Service 进行远程管理。

准备工作

  1. 本主题介绍使用 JSON 格式的 CCDT 告诉 runmqsc 如何连接队列管理器
    • 要使用 JSON 格式的 CCDT,必须安装 runmqsc IBM MQ v9.1.2 或更高版本。 V9.1.2 之前的 runmqsc 版本不支持 JSON 格式 CCDT
    • 如果愿意,您也可以使用二进制 CCDT 将 runmqsc 连接到队列管理器,但此处提供的说明专门针对 JSON CCDT
  2. 要配置客户端密钥存储文件,需要使用 runmqakm 等工具。
    • 这些工具既可在 IBM MQ 的完整安装中使用,也可在 IBM MQ 客户端的操作系统安装中使用
    • 完整版和客户端安装程序均可从 MQ 下载页面获取
    • 此外,还有一个面向开发者的 MacOS 工具包客户端,允许原生使用 runmqscmacOS

配置 runmqsc 以使用标准的(“单向”) TLS 连接

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

您可以从队列管理器详细信息页面下载 JSON CCDT,方法是点击 Connection information 按钮,然后选择 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. 打开命令提示符窗口并导航至 IBM MQ bin 安装目录。 例如,其位置取决于您的操作系统:
    操作系统 文件位置
    Linux® 完整的 IBM MQ 安装 /var/mqm/bin
    Windows C:\Program Files\IBM\MQ\bin
    Linux/macOS ,使用客户端安装 ~/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=        
      注意: 不得设置 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 命令需要输入以下信息:
  • IBM MQ 管理员用户名和 API 密钥,您可按照 《使用 IBM MQ Explorer 和 runmqsc 命令行管理队列管理器 》中“收集所需的连接详细信息”部分的说明,从服务控制台获取这些信息。 请注意,这必须是管理员用户名和 API 密钥,而不是应用程序用户名和 API 密钥
  • 队列管理器名称,必须与 JSON CCDT 文件中指定的名称一致,例如 " QM1 "。
    <Path to MQ/bin directory>/runmqsc -c -u mqusername QM1
runmqsc 上的所有操作现在都在安全通道上运行。

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

以下步骤介绍了如何扩展上述说明,以配置客户端 runmqsc 与队列管理器之间的双向 TLS 连接。

runmqsc在双向 TLS 场景中,客户端(例如,) 向队列管理器提交客户证书,队列管理器必须配置为信任传入的客户证书。

  1. 生成一个 TLS 客户端证书,用于识别客户端 runmqsc

    在一些组织中,中央认证中心 (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 -addext "extendedKeyUsage = clientAuth"
    
    # 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. 配置队列管理器以信任客户证书:

    • 通过导航至 IBM MQ as a Service 服务控制台用户界面的队列管理器详细信息页面,并选择 " 信任存储 "选项卡,导入客户证书的公共部分
    • 单击 " 导入证书 "按钮,然后选择包含客户证书公共部分的文件,例如 clientCert.pem
    • 单击 “下一步” ,然后选择证书标签(标签不必与客户端密钥库文件中的标签相同),然后单击。
    • 证书上传完成后,系统会提示您刷新队列管理器的 SSL 安全配置。您可以通过 IBM MQ 控制台、 SaveIBM MQ Explorer, runmqsc 或按照 《使用 IBM MQ Explorer和runmqsc命令行管理队列管理器 》中的说明进行操作。
  4. 将队列管理器通道配置为要求双向 TLS :

    • 通道的 TLS 模式由通道的 属性 SSL Authentication 控制,该属性必须设置为 Required 才能启用双向 TLS。 您可以使用 IBM MQ Console 或 IBM MQ Explorer 通过用户界面设置属性,如果使用 runmqsc ,则必须将属性 SSLCAUTH 设置为 REQUIRED
  5. 配置 runmqsc ,使其在连接队列管理器时出示客户证书:

    • MQCERTLABL 环境变量设置为本地密钥库文件中客户端证书的标签,然后即可执行该 runmqsc 命令连接到队列管理器,此次连接将配置为使用 TLS 双向身份验证。
      export MQCERTLABL=runmqsc
      runmqsc -c -u mqusername QM1

后续步骤

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