我可以使用 Linux 机器上安装的 MQ 客户端 v9 通过 Pymqi 连接到 IBM mq。有通过 SSL 连接的要求。我应该如何为双向 TLS(mTLS)创建密钥存储库?
我已经在使用 PyMQI 的 Python 应用程序之间配置了相互 tls,该应用程序支持MacOS的IBM MQ 工具包(9.1.5.0) 和运行在Raspberry Pi (9.2.0.0)上的队列管理器。
我使用了自签名证书,以便更轻松地说明使用 MQ 的 TLS 配置的端到端示例。这通常不会在生产环境中使用;您的 MQ 管理员通常会提供您可能需要使用的任何证书,这些证书通常由证书颁发机构颁发。在这种情况下,您可以跳过下面的证书创建步骤。
以下是我采取的步骤:
初始服务器和 Python 代码设置
通用配置
mkdir tlsTest
cd tlsTest
mkdir client
mkdir server
Run Code Online (Sandbox Code Playgroud)
队列管理器配置
创建服务器密钥库。
cd server
Run Code Online (Sandbox Code Playgroud)
runmqakm -keydb -create -db key.kdb -pw <password> -stash
Run Code Online (Sandbox Code Playgroud)
ls
Run Code Online (Sandbox Code Playgroud)
检查以查看key.crl key.kdb key.rdb key.sth。
检查商店是否为空。
runmqakm -cert -list -db key.kdb -stashed
Run Code Online (Sandbox Code Playgroud)
No certificates were found.
Run Code Online (Sandbox Code Playgroud)
创建服务器证书并将其放入新的密钥库中 key.kdb
runmqakm -cert -create -db key.kdb -stashed -dn "cn=qm,o=ibm,c=uk" -label ibmwebspheremq<QMName_lowerCase> -type cms
Run Code Online (Sandbox Code Playgroud)
检查证书。
runmqakm -cert -list -db key.kdb -stashed
Run Code Online (Sandbox Code Playgroud)
Certificates found
* default, - personal, ! trusted, # secret key
- ibmwebspheremqqm1
Run Code Online (Sandbox Code Playgroud)
“-”表示此密钥库中的客户端私钥和个人证书。
提取队列管理器的公钥。
runmqakm -cert -extract -label ibmwebspheremq<QMName_lowerCase> -db key.kdb -stashed -file QM.cert
Run Code Online (Sandbox Code Playgroud)
检查以查看证书文件。
ls
Run Code Online (Sandbox Code Playgroud)
QM.cert key.crl key.kdb key.rdb key.sth
Run Code Online (Sandbox Code Playgroud)
检查证书。
runmqakm -cert -details -file QM.cert -stashed
Run Code Online (Sandbox Code Playgroud)
客户端配置
cd ../client
Run Code Online (Sandbox Code Playgroud)
runmqakm -keydb -create -db client.kdb -pw <password> -stash
Run Code Online (Sandbox Code Playgroud)
client.kdb。
runmqakm -cert -create -db client.kdb -stashed -dn "cn=pymqi,o=test,c=uk" -label ibmwebspheremq<userName_lowercase> -type cms
Run Code Online (Sandbox Code Playgroud)
runmqakm -cert -extract -label ibmwebspheremq<userName_lowercase> -db client.kdb -stashed -file Client.cert
Run Code Online (Sandbox Code Playgroud)
runmqakm -cert -list服务器步骤中的先前命令来检查证书。交换公钥
使用队列管理器的公钥填充客户端的密钥库。
runmqakm -cert -add -label ibmwebspheremq<QMName_lowerCase> -db client.kdb -stashed -file ../server/QM.cert
Run Code Online (Sandbox Code Playgroud)
检查证书。
runmqakm -cert -list -db client.kdb -stashed
Run Code Online (Sandbox Code Playgroud)
Certificates found
* default, - personal, ! trusted, # secret key
! ibmwebspheremqqm1
- ibmwebspheremqapp
Run Code Online (Sandbox Code Playgroud)
这 '!' 表明队列管理器的公钥是可信的。
使用客户端的公钥填充队列管理器的密钥库。
切换到服务器目录。
cd ../server
Run Code Online (Sandbox Code Playgroud)
runmqakm -cert -add -label ibmwebspheremq<userName_lowercase> -db key.kdb -stashed -file ../client/Client.cert
Run Code Online (Sandbox Code Playgroud)
检查证书。
runmqakm -cert -list -db key.kdb -stashed
Run Code Online (Sandbox Code Playgroud)
Certificates found
* default, - personal, ! trusted, # secret key
! ibmwebspheremqapp
- ibmwebspheremqqm1
Run Code Online (Sandbox Code Playgroud)
在队列管理器上配置 TLS
将key.kdb和key.sth文件从tlsTest/server目录移动到/var/mqm/qmgrs/ssl/QM1队列管理器文件系统上的目录。
修改DEV.APP.SVRCONN通道以接受 TLS 1.2 密码套件。
runmqsc QM1
Run Code Online (Sandbox Code Playgroud)
ALTER CHANNEL(DEV.APP.SVRCONN) CHLTYPE(SVRCONN) SSLCIPH(ANY_TLS12)
Run Code Online (Sandbox Code Playgroud)
刷新队列管理器的安全子系统。
REFRESH SECURITY(*) TYPE(SSL)
Run Code Online (Sandbox Code Playgroud)
TLS 启用了 MQ PyMQI 应用程序
将密码规范和标签添加到 Python 应用程序中并包含 sco 选项。
mkdir tlsTest
cd tlsTest
mkdir client
mkdir server
Run Code Online (Sandbox Code Playgroud)
更改qmgr.connect行以添加sco选项。
cd server
Run Code Online (Sandbox Code Playgroud)
测试 Python 应用程序。
使用环境变量来引用标签和密钥库的替代配置
更改 python 应用程序以删除标签和密钥库。
runmqakm -keydb -create -db key.kdb -pw <password> -stash
Run Code Online (Sandbox Code Playgroud)
设置环境变量。
export MQSSLKEYR=tlsTest/client/client
export MQCERTLABL=ibmwebspheremqapp
Run Code Online (Sandbox Code Playgroud)
测试 Python 应用程序。
| 归档时间: |
|
| 查看次数: |
1334 次 |
| 最近记录: |