使用 SSL 从 AIX 机器连接到远程队列管理器
Connecting to a Remote Queue Manager from an AIX Machine using SSL
我正在尝试使用 SSL 从 AIX 机器连接到远程 QM。
我已将我的 QM 和频道设置为允许 SSL 连接。
我在服务器(包含上述 QM + 通道的机器)上创建了一个密钥库,并导出了它的自签名证书并从客户端导入了证书。
我在 AIX 机器上使用 GSK 创建了一个密钥库,其中存在服务器的自签名和签名者。
尝试连接到 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,但都没有成功。我错过了什么?
感谢任何帮助。
您拥有的客户端证书的当前标签是ibmwebspherebldaix02
。
对于 MQI 客户端应用程序,MQ 将查找的默认证书标签是字符串 ibmwebspheremq
,后跟应用程序的用户名 运行,全部为小写。
在这种情况下,它不符合默认要求的第一部分,因为它以 ibmwebsphere
开头,缺少 mq
,然后是 bldaix02
。
您有几个选择:
- 如果用户是
bldaix02
,那么您可以将密钥库中的证书重命名为 ibmwebspheremqbldaix02
。如果那不是用户名,则将证书重命名为 ibmwebspheremq<username>
全部小写。此选项应适用于所有版本的 IBM MQ 产品。
- 如果您使用的是 IBM MQ v7.0 - 7.5(这些都不受支持),您可以通过设置环境变量 [= =18=] 在启动应用程序之前更改为任何值,或者如果在程序中执行此操作,请在调用 connect 之前执行此操作。请注意,此功能已在 IBM MQ v8.0 和 v9.0 的初始版本中删除,但后来在 8.0.0.7 和 9.0.0.1 及更高版本中重新添加。
如果您使用的是 IBM MQ v8.0 或更高版本(您应该使用,因为这些是当前唯一受支持的版本),您可以告诉 MQ 查看对于不同的标签。您可以通过四种方式做到这一点:
- 如果使用 CCDT,请设置
CLNTCONN
通道的 CERTLABL
属性。
- 以编程方式在
MQSCO
中设置 CertificateLabel
属性
- 在启动应用程序之前设置环境变量
MQCERTLABL
,或者如果在程序中设置环境变量,请在调用连接之前设置。
- 使用mqclient.ini中
SSL:
节的CertificateLabel
属性。
注意:有多种方法MQ 将找到 mqclient.ini,这些在 IBM MQ 知识中心和 Whosebug 上的各种答案中都有详细说明。
您可以在以下链接中找到更多信息:
我正在尝试使用 SSL 从 AIX 机器连接到远程 QM。
我已将我的 QM 和频道设置为允许 SSL 连接。
我在服务器(包含上述 QM + 通道的机器)上创建了一个密钥库,并导出了它的自签名证书并从客户端导入了证书。
我在 AIX 机器上使用 GSK 创建了一个密钥库,其中存在服务器的自签名和签名者。
尝试连接到 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,但都没有成功。我错过了什么?
感谢任何帮助。
您拥有的客户端证书的当前标签是ibmwebspherebldaix02
。
对于 MQI 客户端应用程序,MQ 将查找的默认证书标签是字符串 ibmwebspheremq
,后跟应用程序的用户名 运行,全部为小写。
在这种情况下,它不符合默认要求的第一部分,因为它以 ibmwebsphere
开头,缺少 mq
,然后是 bldaix02
。
您有几个选择:
- 如果用户是
bldaix02
,那么您可以将密钥库中的证书重命名为ibmwebspheremqbldaix02
。如果那不是用户名,则将证书重命名为ibmwebspheremq<username>
全部小写。此选项应适用于所有版本的 IBM MQ 产品。 - 如果您使用的是 IBM MQ v7.0 - 7.5(这些都不受支持),您可以通过设置环境变量 [= =18=] 在启动应用程序之前更改为任何值,或者如果在程序中执行此操作,请在调用 connect 之前执行此操作。请注意,此功能已在 IBM MQ v8.0 和 v9.0 的初始版本中删除,但后来在 8.0.0.7 和 9.0.0.1 及更高版本中重新添加。
如果您使用的是 IBM MQ v8.0 或更高版本(您应该使用,因为这些是当前唯一受支持的版本),您可以告诉 MQ 查看对于不同的标签。您可以通过四种方式做到这一点:
- 如果使用 CCDT,请设置
CLNTCONN
通道的CERTLABL
属性。 - 以编程方式在
MQSCO
中设置 - 在启动应用程序之前设置环境变量
MQCERTLABL
,或者如果在程序中设置环境变量,请在调用连接之前设置。 - 使用mqclient.ini中
SSL:
节的CertificateLabel
属性。
注意:有多种方法MQ 将找到 mqclient.ini,这些在 IBM MQ 知识中心和 Whosebug 上的各种答案中都有详细说明。
CertificateLabel
属性- 如果使用 CCDT,请设置
您可以在以下链接中找到更多信息: