【问题标题】:Connecting to a Remote Queue Manager from an AIX Machine using SSL使用 SSL 从 AIX 机器连接到远程队列管理器
【发布时间】:2018-12-11 22:31:14
【问题描述】:

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

我已设置我的 QM 和通道以允许 SSL 连接。

我在服务器(包含上述 QM + 通道的机器)上创建了一个 KeyStore,并导出了其自签名证书并从客户端导入了证书。

我在 AIX 机器上使用 GSK 创建了一个 Keystore,其中同时存在 Self Signed 和 Signer of the Server。

尝试连接到 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 错误返回,当检查错误日志时它抱怨证书。

我尝试过重新启动 QM、重新启动频道、刷新 SSL,但都没有成功。我错过了什么?

任何帮助表示赞赏。

【问题讨论】:

  • 显示应用程序正在使用的通道的“客户端”代码或 MQ JNDI 或 CCDT 值。看来您还没有在客户端定义 SSL/TLS 值。
  • 您好 Roger,感谢您的评论,我已添加用于连接到上述 QM 的客户端代码。如上所述,这适用于我的 Windows 单元测试
  • 你使用的是什么版本的MQ客户端?
  • 为了让未来的用户能够找到此内容,最好粘贴问题中屏幕截图中显示的文本,而不是屏幕截图,因为这些错误随后可以在 Google 和堆栈溢出。例如,从 AMKERR01.LOG 粘贴文本后,您可以突出显示它并单击顶部的 " 图标,它将在每行的开头插入 4 个空格,使其保持与粘贴相同的格式。跨度>

标签: ssl ssl-certificate ibm-mq aix


【解决方案1】:

您拥有的客户端证书的当前标签是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 使用默认证书在启动应用程序之前,或者如果在程序中执行它,请在调用 connect 之前执行它。请注意,此功能在 IBM MQ v8.0 和 v9.0 的初始版本中被删除,但后来在 8.0.0.7 和 9.0.0.1 及更高版本中重新添加。
  3. 如果您使用的是 IBM MQ v8.0 或更高版本(您应该使用这些是当前唯一支持的版本),您可以告诉 MQ 寻找不同的标签。您可以通过四种方式做到这一点:

    1. 如果使用 CCDT,请设置 CLNTCONN 频道的 CERTLABL 属性。
    2. 以编程方式设置MQSCO 中的CertificateLabel 属性
    3. 在启动应用程序之前设置环境变量MQCERTLABL,或者如果在程序中进行,请在调用connect之前进行。
    4. 在 mqclient.ini 中使用 SSL: 节的 CertificateLabel 属性。
      注意: 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

【讨论】:

  • 感谢乔希提供的信息,非常感谢,我重命名了我的证书,这按预期工作。把我的头发拉到这个上面
猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多