使用SSL从AIX机器连接到Remote Queue Manager

时间:2018-07-03 14:48:58

标签: ssl ssl-certificate ibm-mq aix

我正在尝试使用AIX机器上的SSL连接到远程QM。

我已设置我的QM和频道以允许SSL连接。 SSL Cipher Spec

我已经在服务器(包含上述QM +通道的机器)上创建了密钥库,并导出了其自签名证书并从客户端导入了证书。 Self signed Cert - Server Signed Cert - Client

我已经在AIX机器上使用GSK创建了一个密钥库,其中同时存在服务器的自签名和签名者。 Client Side Certs

尝试连接到QM时,客户端代码如下。该代码可以在Windows上运行,但是不能在AIX上运行,这使我相信这是证书问题,我做错了,而不是代码问题。

CipherSpec是-TLS_RSA_WITH_AES_256_CBC_SHA256 并且密钥库位置正确。

m_QChannel.setChannelName(m_strChannelName);
    m_QChannel.setConnectionName(m_pParent->GetName());
    m_QChannel.setTransportType( MQXPT_TCP );

    if (!m_strCipherSpec.IsEmpty())
    {
        m_QChannel.setSslCipherSpecification(m_strCipherSpec);

        if (!m_strKeyStore.IsEmpty())
        {
            m_QMgr.setKeyRepository(m_strKeyStore);
        }
        else
        {
            CString strKeyStore = getenv("MQSSLKEYR");
            m_QMgr.setKeyRepository(strKeyStore);
        }
    }

    //Set the queue manager options
    m_QMgr.setName(m_strName);
    m_QMgr.setChannelReference(&m_QChannel);

    if (!m_QMgr.connect()) 
    {
        m_iLastError =m_QMgr.reasonCode( ) ;

        return false;         
    }

但是,当我尝试运行应用程序进行连接时,却返回了MQRC 2393错误,当检查错误日志时,它会抱怨证书。

Error 2393 Error Log

我尝试过重新启动QM,重新启动通道,刷新SSL,但是都没有运气。我错过了什么?

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

您拥有的客户端证书的当前标签为ibmwebspherebldaix02

对于MQI客户端应用程序,MQ将查找的默认证书标签为字符串ibmwebspheremq,后跟应用程序正在运行的用户名(全部小写)。

在这种情况下,它不符合默认要求的第一部分,因为它以ibmwebsphere开头,并且缺少mq,然后是bldaix02

您有几种选择:

  1. 如果用户为bldaix02,则可以将密钥库中的证书重命名为ibmwebspheremqbldaix02。如果不是用户名,则将证书重命名为ibmwebspheremq<username>,全部使用小写字母。此选项应与所有版本的IBM MQ产品一起使用。
  2. 如果您使用的是IBM MQ v7.0-7.5(这些都已不受支持),则可以通过将环境变量AMQ_SSL_ALLOW_DEFAULT_CERT设置为MQ来告诉MQ使用Default cert。在启动应用程序之前,或者如果在程序中执行此操作,则在调用connect之前执行任何值。请注意,此功能在IBM MQ v8.0和v9.0的初始版本中已删除,但后来在8.0.0.7和9.0.0.1及更高版本中又添加回去。
  3. 如果您使用的是IBM MQ v8.0或更高版本(您应该使用,因为这是当前唯一受支持的版本),您可以告诉MQ寻找不同的标签。您可以通过四种方式执行此操作:

    1. 如果使用CCDT,请设置CERTLABL频道的CLNTCONN属性。
    2. 以编程方式在CertificateLabel中设置MQSCO属性
    3. 在启动应用程序之前设置环境变量MQCERTLABL,或者如果在程序中进行操作,请在调用connect之前进行设置。
    4. 在mqclient.ini中使用CertificateLabel节的SSL:属性。
      注意: MQ有多种方法可以找到mqclient.ini和这些在IBM MQ知识中心和StackOverflow上的各种答案中都有详细说明。

您可以在以下链接中找到更多信息:

  1. Technote: Specifying the userid in the SSL certificate label for an MQ client
  2. IBM MQ 8.0.0 Knowledge Center > IBM MQ > Security > Security overview > IBM MQ security mechanisms > Security protocols in IBM MQ> The SSL or TLS key repository > Digital certificate labels, understanding the requirements