无法使用 SSL 连接到 IBMMQ 7.5

Could not Connect to IBMMQ 7.5 using SSL

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

The SSL key repository cannot be used because MQ cannot obtain a password to access it. Reasons giving rise to this error include: &B (a) the key database file and password stash file are not present in the location configured for the key repository, &B (b) the key database file exists in the correct place but that no password stash file has been created for it, &B (c) the files are present in the correct place but the userid under

public void test() {
    Environment.SetEnvironmentVariable("MQCCSID", "437");

    MQQueueManager mQQueueManager = null;
    MQQueue mQQueue = null;
    Hashtable hashTable = null;
    try {
        hashTable = new Hashtable();
        // Setup properties for connection
        hashTable.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
        hashTable.Add(MQC.HOST_NAME_PROPERTY, "IP");
        hashTable.Add(MQC.PORT_PROPERTY, 1414);
        hashTable.Add(MQC.CHANNEL_PROPERTY, "Channel");
        hashTable.Add(MQC.PASSWORD_PROPERTY, "123");
        hashTable.Add(MQC.USER_ID_PROPERTY, "user");

        mQQueueManager = new MQQueueManager("QueueName", hashTable);

        // Open queue for browsing
        mQQueue = mQQueueManager.AccessQueue("que", MQC.MQOO_BROWSE | MQC.MQOO_FAIL_IF_QUIESCING);

        ListOfMessages = new List < MQMessageDto > ();
        // In a loop browse all messages till we reach end of queue
        while (true) {
            try {
                // Need to create objects everytime
                var mQMessage = new MQMessage();

                var mQGetMessageOptions = new MQGetMessageOptions {
                    // Use browse next option to start browsing
                    Options = MQC.MQGMO_BROWSE_NEXT
                };
                mQQueue.Get(mQMessage, mQGetMessageOptions);
                ListOfMessages.Add(new MQMessageDto() {
                    Id = ListOfMessages.Count + 1,
                    Message = Encoding.UTF8.GetString(mQMessage.ReadBytes(mQMessage.MessageLength))
                });
            } catch (MQException mqex) {
                if (ListOfMessages.Count == 0) {
                    MessageBox.Show("There is no messages in MQ");
                }
                mQQueue.Close();
                break;
            }
        }
        mQQueueManager.Disconnect();

        grdMessages.DataSource = ListOfMessages;
        grdMessages.Columns["Id"].Width = (int)(grdMessages.Width * 0.1);
        grdMessages.Columns["Message"].Width = (int)(grdMessages.Width * 0.8);
    } catch (Exception ex) {
        MessageBox.Show(ex.Message);
    }
}




您没有提到您使用的是哪个具体级别的 7.5。如果是 7.5.0.7 或更早版本,存储文件可能是问题所在:

https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.1.0/com.ibm.mq.mig.doc/q128820_.htm

MQ (GSKit) 使用的旧版本加密提供程序使用不同的存储文件格式作为密钥库密码。

虽然较新的 GSKit 版本可以处理旧的存储文件格式,但旧的 GSKit 版本无法读取新格式。如果您使用的关卡使用了新格式,您可以使用 -v1stash 选项创建向后兼容的存储文件:

runmqakm -keydb -stashpw -db <filename> -pw <password> -v1stash

由于 MQ 7.5 不受支持,更好的选择是使用更新的客户端级别,如果需要,它仍然可以与 7.5 队列管理器通信。

作为参考,使用新存储文件格式的第一个 GSKit 级别是 8.0.50.69。此处列出了与 MQ 捆绑在一起的 GSKit 级别:https://www.ibm.com/support/pages/levels-jre-and-gskit-bundled-ibm-mq

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

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

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

关于:

When I upgraded my client to V9 I'm getting "MQRC_Q_MGR_NOT_AVAILABLE" on client and "4/23/2020 21:03:22 - Process(11764.64) User() Program(amqrmppa.exe) Host(HOST) Installation(Installation1) VRMF(7.5.0.2) QMgr() Remote channel '' did not specify a CipherSpec. Remote channel '' did not specify a CipherSpec when the local channel expected one to be specified. &P The remote host is '...* (...)'. &P The channel did not start. Change the remote channel '' on host ()' to specify a CipherSpec so that both ends of the channel have matching CipherSpecs." in server

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

dis chl(xxx)