Arhn - архитектура программирования

Подключение к WebSphere MQ с использованием анонимного SSL

Я получаю исключение "com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2393'" в приведенном ниже коде. Мое требование состоит в том, чтобы подключить QM, используя канал подключения к серверу SSL. Аутентификация клиента не требуется.

import com.ibm.mq.*;
public class MQSeriesDataCollector implements CustomDCInf
{
public static void main (String [] args)
{
    String qName="apm_qm";
    MQEnvironment.hostname=args [0]; 
    MQEnvironment.channel=args [1]; 
    MQEnvironment.port=Integer.parseInt(args [2]);
    MQEnvironment.sslFipsRequired=true;
    MQEnvironment.sslCipherSuite = "SSL_RSA_WITH_RC4_128_MD5";//RC4_MD5_US
    MQQueueManager qMgr=null;
    try{
        qMgr = new MQQueueManager("apm_qm");
    }catch (MQException mqe){
        mqe.printStackTrace();
}
PCFMessageAgent agent=null;
StringBuffer output = new StringBuffer();
MQSeriesDataCollector mqTest=new MQSeriesDataCollector();
        try{
            agent = mqTest.getMQConnection(qMgr);
            output.append(mqTest.getQueueStats(agent));
        }
        catch(MQException mqe){
            System.out.println("Error:" + mqe.reasonCode + " Description:"+PCFConstants.lookupReasonCode (mqe.reasonCode));
            mqe.printStackTrace();
        }
        catch(NoClassDefFoundError ex){
            ex.printStackTrace();
        }
        catch (Exception e){            
             e.printStackTrace();           
        }
        finally{
            try{
                if(agent!=null){
                    agent.disconnect();
                }
            }            
            catch(Exception ex){                
                ex.printStackTrace();
            }
        }

        System.out.println(output.toString());
    }
Exception:
com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2393'.
        at com.ibm.mq.MQManagedConnectionJ11.(MQManagedConnectionJ11.java:235)
        at com.ibm.mq.MQClientManagedConnectionFactoryJ11._createManagedConnection(MQClientManagedConnectionFactoryJ11.java:505)
        at com.ibm.mq.MQClientManagedConnectionFactoryJ11.createManagedConnection(MQClientManagedConnectionFactoryJ11.java:547)
18.09.2012

Ответы:


1

Чтобы удовлетворить ваше требование не аутентифицировать клиентскую сторону, канал должен быть установлен на SSLCAUTH(OPTIONAL). У администратора очередей должен быть сертификат, а у клиента должно быть хранилище trsuststore, содержащее цепочку подписавших для сертификата QMgr (если он подписан CA) или открытый ключ сертификата QMgr (если он подписан самостоятельно). Помните, что при использовании SSL/TLS сторона сервера всегда аутентифицируется, и для этого требуется личный сертификат на сервере и способ его проверки клиентом. Кроме того, клиент и QMgr должны согласовать используемые протоколы, и если требуется FIPS, они должны использовать один из алгоритмов, сертифицированных FIPS.

В коде, опубликованном выше, есть одна вещь, которая определенно неверна, и несколько вещей, которые являются вторичными возможными причинами проблемы. Как только вы разрешите конфигурацию, которую я опишу ниже, вы можете столкнуться с одной из второстепенных проблем. Чтобы быть уверенным, что из этого применимо, необходимо знать, какая версия клиента и сервера WMQ, определение канала, настройки SSL для вызова JSSE и/или командной строки и т. д.

Таким образом, в этом случае 2393 указывает, что клиентская сторона не может инициализировать сеанс SSL/TLS. Очевидная проблема заключается в том, что, согласно странице Инфоцентра SSL CipherSpecs and CipherSuites, эти два параметра являются недопустимой комбинацией:

MQEnvironment.sslFipsRequired=true;
MQEnvironment.sslCipherSuite = "SSL_RSA_WITH_RC4_128_MD5";//RC4_MD5_US

Вы не указали, какая у вас версия клиента и сервера WMQ, поэтому вот ссылка на эту страницу для V7.0, V7.1 и V7.5. Обратите внимание, что столбец, в котором указано соответствие FIPS, не включает набор шифров MD5. (MD5 не работает и не должен использоваться для подписи сертификатов, SSL, TLS или чего-то еще. Если на то пошло, SSL не работает, и в дальнейшем следует использовать только шифры TLS, но это обсуждение для другого вопроса.) Чтобы получить это вам нужно либо установить MQEnvironment.sslFipsRequired=false, либо выбрать один из наборов шифров, который сертифицирован и указан в крайнем правом столбце.

Не зная, с какими версиями вы работаете, я бы посоветовал установить для FIPS значение false и использовать NULL_SHA в канале и SSL_RSA_WITH_NULL_SHA в приложении, пока вы не убедитесь, что все остальные конфигурации работают. Этот набор шифров доступен на всех платформах во всех версиях WMQ. Использование этого для проверки гарантирует, что все остальные настройки верны. Как только вы заработаете, выберите более надежный набор шифров на основе TLS и SHA, доступный как на стороне сервера, так и на стороне клиента.

Тем не менее, вот некоторые из других возможных проблем, с которыми вы можете столкнуться.

Вы можете получить 2393, когда приложение не находит свое хранилище доверенных сертификатов или цепочку сертификатов или подписантов в этом хранилище доверенных сертификатов, которое представляет серверную часть. Вы можете передать их в командной строке:

java -Djavax.net.ssl.trustStore=key2.jks \
     -Djavax.net.ssl.trustStorePassword=passw0rd \
     -cp "%CLASSPATH%"  \
     com.ibm.examples.JMSDemo -pub -topic JMSDEMOPubTopic

Операции с хранилищем ключей и хранилищем доверенных сертификатов обрабатываются поставщиком JSSE, а не самим WMQ. Поэтому любой метод, который вы обычно используете для настройки поставщика JSSE, должен работать. В дополнение к командной строке, как показано выше, это может включать, например, настройки, управляемые контейнером, на сервере Java EE.

Вы также можете получить сообщение об ошибке (я не помню, было ли это 2393), если соединение доходит до сервера, представляющего свой сертификат, а хранилище доверенных сертификатов имеет неправильную или неполную цепочку подписантов.

Другие возможные причины ошибки 2393 включают права доступа к файлам, неправильное написание пути или имени файла и т. д.

18.09.2012
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..