C# 无法使用SSL连接到IBMMQ 7.5

C# 无法使用SSL连接到IBMMQ 7.5,c#,ibm-mq,C#,Ibm Mq,当我切换到7.5(DLL和服务器)时,下面的代码在IBMMQ 8.0 DLL和服务器上运行良好,它使用相同的证书给我这个错误 无法使用SSL密钥存储库,因为MQ无法获取 访问它的密码。导致此错误的原因包括:&B (a) 密钥数据库文件和密码隐藏文件在中不存在 为密钥存储库配置的位置,&B(B)密钥 数据库文件存在于正确的位置,但没有密码隐藏 已为其创建文件,&B(c)文件位于 正确的位置,但用户ID位于 公共无效测试(){ SetEnvironmentVariable(“MQCCSID”,“43

当我切换到7.5(DLL和服务器)时,下面的代码在IBMMQ 8.0 DLL和服务器上运行良好,它使用相同的证书给我这个错误

无法使用SSL密钥存储库,因为MQ无法获取 访问它的密码。导致此错误的原因包括:&B (a) 密钥数据库文件和密码隐藏文件在中不存在 为密钥存储库配置的位置,&B(B)密钥 数据库文件存在于正确的位置,但没有密码隐藏 已为其创建文件,&B(c)文件位于 正确的位置,但用户ID位于

公共无效测试(){
SetEnvironmentVariable(“MQCCSID”,“437”);
MQQueueManager MQQueueManager=null;
MQQueue MQQueue=null;
Hashtable Hashtable=null;
试一试{
hashTable=新的hashTable();
//设置连接的属性
Add(MQC.TRANSPORT_属性,MQC.TRANSPORT_MQSERIES_MANAGED);
Add(MQC.HOST_NAME_属性,“IP”);
Add(MQC.PORT_属性,1414);
Add(MQC.CHANNEL_属性,“CHANNEL”);
Add(MQC.PASSWORD_属性,“123”);
Add(MQC.USER_ID_属性,“USER”);
mQQueueManager=新mQQueueManager(“QueueName”,哈希表);
//打开队列进行浏览
mQQueue=mQQueueManager.AccessQueue(“que”,MQC.MQOO_BROWSE | MQC.MQOO_FAIL_IF_QUIESCING);
ListOfMessages=新列表();
//在循环中浏览所有消息,直到到达队列的末尾
while(true){
试一试{
//每次都需要创建对象
var mQMessage=新mQMessage();
var mQGetMessageOptions=新的mQGetMessageOptions{
//使用“浏览下一步”选项开始浏览
选项=MQC.MQGMO\u浏览\u下一步
};
获取(mQMessage,mQGetMessageOptions);
添加(新的MQMessageDto(){
Id=ListOfMessages.Count+1,
Message=Encoding.UTF8.GetString(mQMessage.ReadBytes(mQMessage.MessageLength))
});
}捕获(MQException mqex){
if(ListOfMessages.Count==0){
MessageBox.Show(“MQ中没有消息”);
}
mQQueue.Close();
打破
}
}
mQQueueManager.Disconnect();
grdMessages.DataSource=ListOfMessages;
grdMessages.Columns[“Id”].Width=(int)(grdMessages.Width*0.1);
grdMessages.Columns[“Message”].Width=(int)(grdMessages.Width*0.8);
}捕获(例外情况除外){
MessageBox.Show(例如Message);
}
}

您没有提到您使用的是哪种特定级别的7.5。如果是7.5.0.7或更早版本,则隐藏文件可能会出现以下问题:

MQ(GSKit)使用的较旧版本的加密提供程序对密钥库密码使用不同的隐藏文件格式

虽然较新的GSKit版本可以处理旧的隐藏文件格式,但较旧的GSKit版本无法读取新格式。如果您使用的是使用新格式的级别,则可以使用-v1隐藏选项创建向后兼容的隐藏文件:

runmqakm -keydb -stashpw -db <filename> -pw <password> -v1stash
runmqakm-keydb-stashpw-db-pw-v1stash
由于MQ7.5不受支持,更好的替代方案是使用更新的客户端级别,如果需要,它仍然可以与7.5队列管理器通信


作为参考,使用新隐藏文件格式的第一个GSKit级别是8.0.50.69。这里列出了与MQ捆绑的GSKit的级别:

您所描述的内容意味着您在IBM端有错误的配置,并且因为您使用的是IBM MQ 7.5。我认为SSL密钥存储库的路径是错误的,它应该指向密钥名称,而不是文件夹

还要确保您已从通道内的SSL选项卡中选择了可选

有关更多详细信息。。有关此问题的更多详细信息,请参见此处关于此错误代码:

关于:


当我将客户机升级到V9时,我在客户机上得到了“MQRC_Q_MGR_NOT_AVAILABLE”和“4/23/2020 21:03:22-Process(11764.64)User()程序(amqrmppa.exe)Host(Host)Installation(Installation1)VRMF(7.5.0.2)QMgr())远程通道“”未指定CipherSpec。当本地通道需要指定CipherSpec时,远程通道“”未指定CipherSpec。&P远程主机为“…*(…)”。&P通道未启动。请更改主机()上的远程通道“”以指定CipherSpec,以便通道两端具有匹配的CipherSpec。”服务器中

显示正在使用的密码规范
dis-chl(xxx)SSLCIPH
您可能指定了基础TLS支持不再支持的内容

dis chl(xxx)

我建议停止使用IBM MQ:)。。。为了解决这个问题,我浪费了三个星期的时间。我用的是7.5.0.2,我用的是8.0.0.5客户端,但没有用。@Selwade-根据我文章中的第一个链接,你需要至少是8.0.0.6客户端才能使用新格式的隐藏文件(8.0.0.14是最新可用的v8客户端,但您也可以使用最新的9.1.0.5客户端和7.5队列管理器)。当我将客户端升级到V9时,我在客户端上获得了“MQRC_Q_MGR_NOT_available”和“4/23/2020 21:03:22-Process(11764.64)User()程序(amqrmppa.exe)主机(Host)安装(Installation1)VRMF(7.5.0.2)QMgr()远程通道“”未指定CipherSpec。当本地通道需要指定CipherSpec时,远程通道“”未指定CipherSpec。&P远程主机为“.*.*(...**)”。&P通道未启动。更改主机()上的远程通道“”'指定密码规范,以便通道两端都有匹配的密码规范。'
dis chl(xxx)