ssl - 使用 SSL 从 AIX 机器连接到远程队列管理器

标签 ssl ssl-certificate ibm-mq aix

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

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

我在服务器(包含上述 QM + channel 的机器)上创建了一个 keystore ,并导出了它的自签名证书并从客户端导入了证书。 Self signed Cert - Server Signed Cert - Client

我在 AIX 机器上使用 GSK 创建了一个 keystore ,其中存在服务器的自签名和签名者。 Client Side Certs

尝试连接到 QM 时,客户端代码如下所示。此代码在 Windows 上运行,但在 AIX 上不起作用,这让我相信这是我做错的证书问题,而不是代码问题。

CipherSpec 是 - TLS_RSA_WITH_AES_256_CBC_SHA256 并且 keystore 位置正确。

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、重新启动 channel 、刷新 SSL,但都没有成功。我错过了什么?

感谢任何帮助。

最佳答案

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

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

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

您有几个选择:

  1. 如果用户是 bldaix02然后您可以将 keystore 中的证书重命名为 ibmwebspheremqbldaix02 .如果那不是用户名,则将证书重命名为 ibmwebspheremq<username>全部小写。此选项应适用于所有版本的 IBM MQ 产品。
  2. 如果您使用的是 IBM MQ v7.0 - 7.5(这些都不受支持),您可以通过设置环境变量来告诉 MQ 使用默认证书 AMQ_SSL_ALLOW_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 的属性 channel 。
    2. 以编程方式设置 CertificateLabel MQSCO 中的属性
    3. 设置环境变量MQCERTLABL在启动应用程序之前,或者如果在程序中执行此操作,请在调用连接之前执行。
    4. 使用CertificateLabel SSL: 的属性mqclient.ini 中的节。
      注意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

关于ssl - 使用 SSL 从 AIX 机器连接到远程队列管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51157464/

相关文章:

Apache 不以 SSL 虚拟主机开头

java - 请求通过 https 加密?

java - 导入 Java 的证书和私钥

docker - IBM MQ docker 将个人证书添加到 .kdb

message-queue - 消息 channel 和消息队列本身有什么区别?

java - 无法建立 SSL 通信黑白客户端进程和 MQ 系列

c# X509Certificate2 添加证书如何标记为可导出

Android 自签名客户端 CA 证书认证失败

java - Tomcat 上的证书配置

Java SSL 连接和未知服务器证书警告