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