Подключение MQ версии 9 с использованием JAVA с SSL - PullRequest
0 голосов
/ 27 сентября 2019

Я попытался подключить MQ версии 9, используя следующий код.

/**
 * Java class to connect to MQ. Post and Retrieve messages.
 *
 */
public class MQClientTest {

    String qMngrStr = "";
    String user = "user";
    String password = "password";
    String queueName = "qname";
    String hostName = "hostName ";
    int port = 1234;
    String channel = "channel";
    String sslCiphersuite="TLS_RSA_WITH_AES_256_CBC_SHA256";
    //message to put on MQ.
    String msg = "WelCome to MQ.";
    //Create a default local queue.
    MQQueue queue;
    MQQueueManager qManager;

    /**
     * Initialize the MQ
     *
     */
    public void init(){

        //Set MQ connection credentials to MQ Envorinment.
         MQEnvironment.hostname = hostName;
         MQEnvironment.channel = channel;
         MQEnvironment.port = port;
         MQEnvironment.userID = user;
         MQEnvironment.password = password;
         MQEnvironment.sslCipherSuite= sslCiphersuite;
       //  MQEnvironment.sslFipsRequired=true;
         //set transport properties.
         MQEnvironment.properties.put(MQConstants.TRANSPORT_PROPERTY, MQConstants.TRANSPORT_MQSERIES_CLIENT);

         try {
             //initialize MQ manager.
            qManager = new MQQueueManager(qMngrStr);
        } catch (MQException e) {
            e.printStackTrace();
            System.out.println("queue manager issue");
        }
    }

    /**
     * Method to put message to MQ.
     *
     */
    public void putAndGetMessage(){

        int openOptions = MQConstants.MQOO_INPUT_AS_Q_DEF | MQConstants.MQOO_OUTPUT; 
        try {
            queue = qManager.accessQueue(queueName, openOptions);

            MQMessage putMessage = new MQMessage();
            putMessage.writeUTF(msg);

            //specify the message options...
            MQPutMessageOptions pmo = new MQPutMessageOptions(); 
            // accept 
            // put the message on the queue
            queue.put(putMessage, pmo);

            System.out.println("Message is put on MQ.");

        catch (MQException e) {
            e.printStackTrace();
            System.out.println("MQexception");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("IOexception");
        }
        catch (Exception e) {
            System.out.println("exception");}
    }

    public static void main(String[] args) {

        System.out.println("Processing Main...");

        MQClientTest clientTest = new MQClientTest();
        System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings", "false");
        // Enabling SSL debug to view the communication
        //System.setProperty("javax.net.debug", "ssl:handshake");

        System.setProperty("javax.net.ssl.trustStore","client.jks");
        System.setProperty("javax.net.ssl.trustStorePassword","clientpass");
        System.setProperty("javax.net.ssl.keyStore","client.jks");
        System.setProperty("javax.net.ssl.keyStorePassword","clientpass");
        //initialize MQ.
        clientTest.init();

        //put and retreive message from MQ.
        clientTest.putAndGetMessage();

        System.out.println("Done!");
    }

}

, но я получаю следующую ошибку:

MQJE001: MQJE001: Код завершения '2', Причина '2393'.

Я попытался установить системную переменную com.ibm.mq.cfg.useIBMCipherMappings в false.а также добавили имя ssl в MQEnvironment.sslCipherSuite.

Я прочитал отображение для шифрования также на веб-сайте IBM.Не могу найти больше решений.Пожалуйста, помогите, если кто-нибудь знает об этом?

Спасибо

1 Ответ

0 голосов
/ 30 сентября 2019

Ваша проблема, вероятно, связана с тем, что JRE не разрешает 256 наборов шифров, а не MQ.См. https://developer.ibm.com/answers/questions/189995/why-do-i-get-amq9771-2393-ssl-initialization-error/ и https://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html#footnote1-1

. Я бы предложил обновить Java JDK до последней версии и повторить попытку.

...