Не удалось подключиться к IBMMQ 7.5 с использованием SSL - PullRequest
1 голос
/ 23 апреля 2020

Ниже код просто отлично работает с IBMMQ 8.0 DLL и сервером, когда я переключаюсь на 7.5 (и DLL, и сервер), он выдает мне эту ошибку, используя тот же сертификат

Нельзя использовать хранилище ключей SSL, поскольку MQ не может получить пароль для доступа к нему. Причины возникновения этой ошибки: & B (a) файл базы данных ключей и файл пароля sta sh отсутствуют в месте, настроенном для хранилища ключей, & B (b) файл базы данных ключей находится в правильном месте, но это для него не был создан файл-хранилище паролей, & B (c) файлы находятся в правильном месте, но ИД пользователя в

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);
    }
}




Ответы [ 3 ]

1 голос
/ 26 апреля 2020

То, что вы описываете, означает, что у вас неправильная конфигурация на стороне IBM, и поскольку вы используете IBM MQ 7.5. Я думаю, что вы неправильно указали путь к хранилищу ключей SSL, он должен указывать на имя ключа, а не на папку.

enter image description here

Также убедитесь, что вы выбрал Необязательный на вкладке SSL внутри вашего канала.

Для получения более подробной информации .. Подробнее об этой проблеме можно узнать здесь об ошибке. Код ошибки: 2538 ошибка MQ для соединения канала SSL

1 голос
/ 23 апреля 2020

Вы не упомянули, какой именно уровень c вы используете. Если это 7.5.0.7 или более ранняя версия, файл sta sh, вероятно, будет проблемой:

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

Старые версии криптографии c провайдер, используемый MQ (GSKit), использует другой формат файла sta sh для пароля хранилища ключей.

Хотя более новые версии GSKit могут обрабатывать старый формат файла sta sh, новый формат не читается старыми Версии GSKit. Если вы используете уровень, который использует новый формат, вы можете создать обратно-совместимый файл sta sh с опцией -v1sta sh:

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

Лучшая альтернатива, так как MQ 7.5 это Вне поддержки было бы использовать более новый уровень клиента, который может по-прежнему взаимодействовать с администратором очередей 7.5, если требуется.

Для справки, первый уровень GSKit, который использует новый формат файла sta sh, равен 8.0 .50.69. Уровни GSKit в комплекте с MQ перечислены здесь: https://www.ibm.com/support/pages/levels-jre-and-gskit-bundled-ibm-mq

0 голосов
/ 26 апреля 2020

Относительно:

Когда я обновил свой клиент до V9, я получаю «MQRC_Q_MGR_NOT_AVAILABLE» на клиенте и «23.04.2020 21:03:22 - Процесс (11764.64) Пользователь () Программа (amqrmppa.exe) Хост (HOST) Установка (Установка1) VRMF (7.5.0.2) QMgr () Удаленный канал '' не указал CipherSpe c. Удаленный канал '' не указал CipherSpe c, когда локальный канал должен быть указан. & P Удаленный хост:. . . * (.. . ) '. & P Канал не запущен. Изменить удаленный канал' ' в host () ', чтобы указать CipherSpe c, чтобы оба конца канала имели совпадающие CipherSpecs. " на сервере

отобразить используемый шифр c dis chl(xxx) SSLCIPH Возможно, вы указали что-то, что больше не поддерживается базовой поддержкой TLS.

dis chl(xxx)
...