使用JAVA和SSL连接MQ版本9

使用JAVA和SSL连接MQ版本9,java,ssl-certificate,ibm-mq,Java,Ssl Certificate,Ibm Mq,我尝试使用以下代码连接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 host

我尝试使用以下代码连接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。并在MQEnvironment.sslCipherSuite中添加了ssl名称

我也在IBM网站上阅读了密码映射的映射。找不到更多的解决方案。如果有人知道这件事,请帮忙


谢谢

您的问题可能是JRE不允许256个密码套件,而不是MQ。看到和


我建议您将Java JDK升级到最新版本,然后重试

RC 2393是MQRC_SSL_INITIALIZATION_ERROR,对于MQ Java/Java应用程序,这通常意味着JRE的TLS套接字库(Java安全套接字扩展(JSSE))对TLS配置中的某些内容不满意。JSSE报告的异常应作为结果MQException的链接异常可用,并将提供有关问题性质的更多信息-您是否能够修改应用程序以打印链接异常?我的queuemanger名称为null,因此获取队列管理器对象时出错。如何解决此问题?@user-提供给MQQueueManager构造函数的队列管理器名称必须是要连接到的队列管理器的实际名称。如果上面代码中的常量值(主机名、端口、通道等)是编译时使用的实际值,那么它们都需要更改为目标队列管理器的正确值。您使用的确切java版本是什么?Ex 1.8 0-124。