Ibm mq Pymqi-使用SSL连接到IBM mq
我能够使用Linux机器上安装的mq客户机v9通过Pymqi连接到IBM mq。有通过SSL连接的要求。我应该如何为双向TLS(MTL)创建密钥存储库?我已经使用(9.1.5.0)支持的PyMQI在python应用程序和(9.2.0.0)上运行的队列管理器之间配置了双向TLS 我使用了自签名证书,以便更容易地演示使用MQ的TLS配置的端到端示例。这通常不会在生产环境中使用;MQ管理员通常会提供您可能需要使用的任何证书,这些证书通常由证书颁发机构颁发。在这种情况下,您可以跳过下面的证书创建步骤 以下是我采取的步骤: 初始服务器和Python代码设置Ibm mq Pymqi-使用SSL连接到IBM mq,ibm-mq,pymqi,Ibm Mq,Pymqi,我能够使用Linux机器上安装的mq客户机v9通过Pymqi连接到IBM mq。有通过SSL连接的要求。我应该如何为双向TLS(MTL)创建密钥存储库?我已经使用(9.1.5.0)支持的PyMQI在python应用程序和(9.2.0.0)上运行的队列管理器之间配置了双向TLS 我使用了自签名证书,以便更容易地演示使用MQ的TLS配置的端到端示例。这通常不会在生产环境中使用;MQ管理员通常会提供您可能需要使用的任何证书,这些证书通常由证书颁发机构颁发。在这种情况下,您可以跳过下面的证书创建步骤 以
- 设置一个IBM MQ服务器,该服务器提供默认的开发人员配置
- 从中提取python示例代码,并在未配置TLS的情况下将消息放入
DEV.QUEUE.1
- 在我的Mac客户端上创建了一些工作目录。
mkdir tlsTest cd tlsTest mkdir client mkdir server
- 创建服务器密钥库
查看cd server
key.crl key.kdb key.rdb key.sth
- 检查商店是否空着
runmqakm -cert -list -db key.kdb -stashed
runmqakm -cert -list -db key.kdb -stashed
runmqakm -cert -list -db key.kdb -stashed
- 创建服务器证书并将其放入新密钥库
key.kdb
“-”表示此密钥库中客户端的私钥和个人证书runmqakm -cert -create -db key.kdb -stashed -dn "cn=qm,o=ibm,c=uk" -label ibmwebspheremq<QMName_lowerCase> -type cms
cd server
- 提取队列管理器的公钥
runmqakm -cert -extract -label ibmwebspheremq<QMName_lowerCase> -db key.kdb -stashed -file QM.cert
runmqakm -cert -extract -label ibmwebspheremq<userName_lowercase> -db client.kdb -stashed -file Client.cert
runmqakm -cert -add -label ibmwebspheremq<QMName_lowerCase> -db client.kdb -stashed -file ../server/QM.cert
- 检查证书
runmqakm -cert -details -file QM.cert -stashed
runmqakm -cert -list -db client.kdb -stashed
- 更改到客户端目录。
cd ../client
- 创建客户机密钥库。
runmqakm -keydb -create -db client.kdb -pw <password> -stash
- 提取客户端的公钥。
runmqakm -cert -extract -label ibmwebspheremq<userName_lowercase> -db client.kdb -stashed -file Client.cert
- 检查证书
runmqakm -cert -details -file QM.cert -stashed
“!”显示队列管理器的公钥是可信的runmqakm -cert -list -db client.kdb -stashed
- 使用客户机的公钥填充队列管理器的密钥库
runmqakm -cert -extract -label ibmwebspheremq<QMName_lowerCase> -db key.kdb -stashed -file QM.cert
runmqakm -cert -extract -label ibmwebspheremq<userName_lowercase> -db client.kdb -stashed -file Client.cert
更改到服务器目录runmqakm -cert -add -label ibmwebspheremq<QMName_lowerCase> -db client.kdb -stashed -file ../server/QM.cert
cd ../server
- 将
和key.kdb
文件从key.sth
目录移动到队列管理器文件系统上的tlsTest/server
目录/var/mqm/qmgrs/ssl/QM1
- 修改
通道以接受TLS 1.2密码套件DEV.APP.SVRCONN
runmqsc QM1
- 刷新队列管理器的安全子系统
REFRESH SECURITY(*) TYPE(SSL)
- 在Python应用程序中添加密码规范和标签,并包括sco选项
cd.SSLCipherSpec=b'ANY_TLS12' sco=pymqi.sco() #包括文件名,但不包括文件扩展名 sco.KeyRepository=b'tlsTest/client/client' sco.CertificateLabel=b'ibmwebspheremqapp'
- 更改
行以添加qmgr.connect
选项sco
qmgr.connect_与_选项(队列管理器,用户=b'app',密码=b'',cd=cd,sco=sco)
- 测试Python应用程序
- 更改python应用程序以删除标签和密钥库
cd server
#sco=pymqi.sco() #sco.KeyRepository=b'tlsTest/client/client' #sco.CertificateLabel=b'ibmwebspheremqapp' #qmgr.connect_with_选项(队列_管理器,用户=b'app,密码=b'',cd=cd,sco=sco) qmgr.connect_with_选项(队列管理器,用户=b'app,密码=b'',cd=cd)
- 设置环境变量
export MQSSLKEYR=tlsTest/client/client export MQCERTLABL=ibmwebspheremqapp
- 测试Python应用程序
runmqakm
用于此目的。你需要做mYLS还是仅仅做1wayTLS?有没有向您提供任何具体要求?当我尝试时,它说找不到命令。下载的客户端库是否支持运行此命令?。还没有提供关于TLS的详细信息您有什么版本的MQ客户端(您说的是v9,但现在有三个主要版本:9.0、9.1和最近的9.2)?你是怎么得到的?它是已安装的客户端还是Redist客户端(您说已安装,所以会假定它不是Redist)?您的客户机运行在什么平台上(如Linux、Windows等)。我已经安装了9.0.0.8,这是从IBM网站上获得的。我已经按照GitHub.com/dsuch/pymqi/issues/15中的说明安装了mqseriesclient而不是redist client。应该存在在linux上运行它的/opt/mqm/bin/runmqakm
。如果您将其设置为“主要”安装,它还将在/bin
下获得一个符号链接。如果路径不是主路径,也可以运行setmqenv
更新路径。我的第一个响应是“您尝试了吗?”。我在上面的评论中提到的区别是runmqckm
是基于Java的,并且runmqakm
是符合要求的。我记得唯一的区别是runmqckm
支持jks
文件,而runmqakm
不支持jks
文件。两者都支持pkcs7和CMS。@JoshMc in/var/mqm/errors/AMQERR01.LOG有错误-AMQ9716:通道解释的远程SSL证书吊销状态检查失败:IBM MQ无法确定远程SSL证书的吊销状态,原因如下:(a)通道无法联系任何CRL服务器或OCSP响应程序以获取证书。(b) 所联系的OCSP响应者都不知道证书的吊销状态。(c) 收到OCSP响应,但无法验证响应的数字签名。关于如何解决这个问题有什么建议吗?这通常意味着您无法获得OCSP响应者的建议。您可以在mqclient.ini的SSL节中禁用此检查以进行进一步测试。正如@JoshMC所说,您的客户端已收到一个证书,该证书虽然信任,但包含吊销服务器的详细信息,以验证证书
ALTER CHANNEL(DEV.APP.SVRCONN) CHLTYPE(SVRCONN) SSLCIPH(ANY_TLS12)
REFRESH SECURITY(*) TYPE(SSL)
export MQSSLKEYR=tlsTest/client/client
export MQCERTLABL=ibmwebspheremqapp