Ibm mq Pymqi-使用SSL连接到IBM mq

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管理员通常会提供您可能需要使用的任何证书,这些证书通常由证书颁发机构颁发。在这种情况下,您可以跳过下面的证书创建步骤 以

我能够使用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服务器,该服务器提供默认的开发人员配置

  • 从中提取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
    
在队列管理器上配置TLS

  • key.kdb
    key.sth
    文件从
    tlsTest/server
    目录移动到队列管理器文件系统上的
    /var/mqm/qmgrs/ssl/QM1
    目录

  • 修改
    DEV.APP.SVRCONN
    通道以接受TLS 1.2密码套件

    runmqsc QM1
    
  • 刷新队列管理器的安全子系统

    REFRESH SECURITY(*) TYPE(SSL)
    
TLS启用了MQ PyMQI应用程序

  • 在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