我正在尝试使用AIX机器上的SSL连接到远程QM。
我已经在服务器(包含上述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,但是都没有运气。我错过了什么?
任何帮助表示赞赏。
答案 0 :(得分:2)
您拥有的客户端证书的当前标签为ibmwebspherebldaix02
。
对于MQI客户端应用程序,MQ将查找的默认证书标签为字符串ibmwebspheremq
,后跟应用程序正在运行的用户名(全部小写)。
在这种情况下,它不符合默认要求的第一部分,因为它以ibmwebsphere
开头,并且缺少mq
,然后是bldaix02
。
您有几种选择:
bldaix02
,则可以将密钥库中的证书重命名为ibmwebspheremqbldaix02
。如果不是用户名,则将证书重命名为ibmwebspheremq<username>
,全部使用小写字母。此选项应与所有版本的IBM MQ产品一起使用。AMQ_SSL_ALLOW_DEFAULT_CERT
设置为MQ来告诉MQ使用Default cert。在启动应用程序之前,或者如果在程序中执行此操作,则在调用connect之前执行任何值。请注意,此功能在IBM MQ v8.0和v9.0的初始版本中已删除,但后来在8.0.0.7和9.0.0.1及更高版本中又添加回去。如果您使用的是IBM MQ v8.0或更高版本(您应该使用,因为这是当前唯一受支持的版本),您可以告诉MQ寻找不同的标签。您可以通过四种方式执行此操作:
CERTLABL
频道的CLNTCONN
属性。CertificateLabel
中设置MQSCO
属性MQCERTLABL
,或者如果在程序中进行操作,请在调用connect之前进行设置。CertificateLabel
节的SSL:
属性。您可以在以下链接中找到更多信息: