使用 runmqsc 确保远程管理安全
本主题介绍了如何启用 TLS ,以便通过 runmqsc 命令对队列管理器 IBM® MQ as a Service 进行远程管理。
准备工作
- 本主题介绍使用 JSON 格式的 CCDT 告诉 runmqsc 如何连接队列管理器
- 要使用 JSON 格式的 CCDT,必须安装 runmqsc IBM MQ v9.1.2 或更高版本。 V9.1.2 之前的 runmqsc 版本不支持 JSON 格式 CCDT
- 如果愿意,您也可以使用二进制 CCDT 将 runmqsc 连接到队列管理器,但此处提供的说明专门针对 JSON CCDT
- 要配置客户端密钥存储文件,需要使用 runmqakm 等工具。
- 这些工具既可在 IBM MQ 的完整安装中使用,也可在 IBM MQ 客户端的操作系统安装中使用
- 完整版和客户端安装程序均可从 MQ 下载页面获取
- 此外,还有一个面向开发者的 MacOS 工具包客户端,允许原生使用 runmqsc 在 macOS。
配置 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"
}
]
}
为 runmqsc 环境配置必要的环境变量
您可以配置环境变量,指示 runmqsc 客户端使用 JSON CCDT 获取队列管理器连接详细信息,其中包括我们在上一步中定义的通道密码规范名称。
- 打开命令提示符窗口并导航至 IBM MQ
bin安装目录。 例如,其位置取决于您的操作系统:操作系统 文件位置 Linux® 完整的 IBM MQ 安装 /var/mqm/binWindows C:\Program Files\IBM\MQ\binLinux/macOS ,使用客户端安装 ~/mytoolkit/IBM-MQ-Toolkit-Mac-x64-9.1.2.0/bin - 设置
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\ccdtMQCHLTAB 是 ccdt 文件的文件名。
export MQCHLTAB=connection_info_ccdt.json set MQCHLTAB=connection_info_ccdt.json
- MQCCCDTURL 是指从系统根目录到 ccdt 文件的完整文件路径。
将环境变量 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 命令来连接队列管理器。
- IBM MQ 管理员用户名和 API 密钥,您可按照 《使用 IBM MQ Explorer 和 runmqsc 命令行管理队列管理器 》中“收集所需的连接详细信息”部分的说明,从服务控制台获取这些信息。 请注意,这必须是管理员用户名和 API 密钥,而不是应用程序用户名和 API 密钥
- 队列管理器名称,必须与 JSON CCDT 文件中指定的名称一致,例如 " QM1 "。
<Path to MQ/bin directory>/runmqsc -c -u mqusername QM1
配置 runmqsc 以使用双向(“双向”) TLS 连接
以下步骤介绍了如何扩展上述说明,以配置客户端 runmqsc 与队列管理器之间的双向 TLS 连接。
runmqsc在双向 TLS 场景中,客户端(例如,) 向队列管理器提交客户证书,队列管理器必须配置为信任传入的客户证书。
- 生成一个 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 - 将新生成的客户端证书添加到本地密钥存储文件中:
将组合的客户机密钥/证书导入到密钥库文件,并记下您使用的标签。
$ runmqakm -cert -add -db key.kdb -file clientCombined.pem -label runmqsc -stashed -type pkcs12 -format ascii 配置队列管理器以信任客户证书:
- 通过导航至 IBM MQ as a Service 服务控制台用户界面的队列管理器详细信息页面,并选择 " 信任存储 "选项卡,导入客户证书的公共部分
- 单击 " 导入证书 "按钮,然后选择包含客户证书公共部分的文件,例如
clientCert.pem - 单击 “下一步” ,然后选择证书标签(标签不必与客户端密钥库文件中的标签相同),然后单击。
- 证书上传完成后,系统会提示您刷新队列管理器的 SSL 安全配置。您可以通过 IBM MQ 控制台、 SaveIBM MQ Explorer, runmqsc 或按照 《使用 IBM MQ Explorer和runmqsc命令行管理队列管理器 》中的说明进行操作。
将队列管理器通道配置为要求双向 TLS :
- 通道的 TLS 模式由通道的 属性
SSL Authentication控制,该属性必须设置为Required才能启用双向 TLS。 您可以使用 IBM MQ Console 或 IBM MQ Explorer 通过用户界面设置属性,如果使用 runmqsc ,则必须将属性SSLCAUTH设置为REQUIRED。
- 通道的 TLS 模式由通道的 属性
配置 runmqsc ,使其在连接队列管理器时出示客户证书:
- 将
MQCERTLABL环境变量设置为本地密钥库文件中客户端证书的标签,然后即可执行该 runmqsc 命令连接到队列管理器,此次连接将配置为使用 TLS 双向身份验证。export MQCERTLABL=runmqsc runmqsc -c -u mqusername QM1
- 将
后续步骤
如果想要将应用程序连接到在通道上启用了 TLS 的队列管理器,那么可以按照以下主题中的指示信息进行操作: