Ibm mq 使用安全密钥(公钥和私钥)连接到MQ

Ibm mq 使用安全密钥(公钥和私钥)连接到MQ,ibm-mq,Ibm Mq,我能够使用不安全的通道建立到QManager的连接,并且能够做任何我想做的事情 但现在我正试图通过安全通道连接到同一个QManager;我已经获得了从MQ服务器生成的安全密钥(公钥和私钥),但我不确定如何合并密钥并建立MQ连接 我在谷歌上搜索了一下,找到了一些答案,建议采用下面的方法,但没有效果 System.setProperty("javax.net.ssl.trustStore","path to public key"); System.setProperty("javax.net.ss

我能够使用不安全的通道建立到QManager的连接,并且能够做任何我想做的事情

但现在我正试图通过安全通道连接到同一个QManager;我已经获得了从MQ服务器生成的安全密钥(公钥和私钥),但我不确定如何合并密钥并建立MQ连接

我在谷歌上搜索了一下,找到了一些答案,建议采用下面的方法,但没有效果

System.setProperty("javax.net.ssl.trustStore","path to public key");
System.setProperty("javax.net.ssl.keyStore","path to private key");
我得到了一个例外

com.ibm.mq.MQException : MQJE001: Completion Code '2', Reason '2537'.
如果您能提供一些关于如何使用安全密钥连接到QManager的指导或示例代码,我将不胜感激

@JoshMc——请在下面找到您问题的答案

  • 您是将IBM MQ类用于Java还是将IBM MQ类用于JMS? 我正在使用IBM MQ Java类

  • 您使用的jar文件来自哪个版本的IBM MQ

    版本7

  • 您尝试连接到的队列管理器是哪个版本的MQ

    版本8

  • 您是否试图让MQ验证客户端证书(检查SVRCONN通道上SSLCAUTH的值)

    对。我有MQ管理员从MQ服务器生成的公钥和私钥(我无法访问MQ服务器),需要使用它连接到MQ服务器

  • 粘贴尝试连接时队列管理器AMQERR01.LOG中显示的任何错误

  • 我没有访问日志文件的权限

    下面是工作代码;我能够连接到不安全通道并发送消息

    公共无效MQSender(){


    }

    您缺少从代码中指定要使用的密码套件的选项: MQEnvironment.sslCipherSuite

    本知识中心文章可能有助于:

    你在JKS商店里有你的可信证书和私人证书/密钥对吗? 这些应该更像:

    System.setProperty(“javax.net.ssl.trustStore”,“包含验证服务器证书所需证书的JKS文件路径”)

    set属性(“javax.net.ssl.keyStore”,“包含客户端证书和私钥的JKS文件的路径”)


    请单击问题下方的“编辑”链接并添加更多详细信息。1.您是将IBM MQ类用于Java还是将IBM MQ类用于JMS?2.您使用的jar文件来自哪个版本的IBM MQ?3.您尝试连接到的队列管理器是哪个版本的MQ?4.您是否试图让MQ验证客户端证书(检查SVRCONN通道上SSLCAUTH的值)5。粘贴尝试连接时队列管理器AMQERR01.LOG中显示的任何错误。提供在没有TLS的情况下工作的代码和在TLS下失败的代码的最少示例。@JoshMc-请找到我对您问题的答案。谢谢。请提供具体版本。@JoshMc——哪个版本?。我在属性中看到的MQ Manager是08000005,MQ Java类版本是7.0.1.4。请编辑该问题以包含完整版本。您正在使用什么jre?您使用的是哪种密码套件?在svrconn通道上设置了哪个cipherspec?
    MQQueueManager QMgr = null; 
    
        try {
    
       MQEnvironment.hostname = "hostname"; 
    
       MQEnvironment.channel = "UNSECURE"; 
       //MQEnvironment.channel = "SECURE";
    
       MQEnvironment.port = 8080;
       QMgr = new MQQueueManager("QManager");
    
           int openOptions = MQConstants.MQOO_OUTPUT;
           MQQueue queue = QMgr.accessQueue("QNAME",openOptions);
    
           MQPutMessageOptions pmo = new MQPutMessageOptions();
           pmo.options = MQConstants.MQPMO_LOGICAL_ORDER | MQConstants.MQPMO_SYNCPOINT;
    
           MQMessage message = new MQMessage();
           message.writeString("TEST");
           queue.put(message, pmo);
    
        QMgr.commit();
    
        } catch (Exception e) {
    
            if(QMgr!=null){
    
        try {
    
            QMgr.backout();
    
        } catch (MQException e1) {
    
            e1.printStackTrace();
        }
             }
    
           e.printStackTrace();
        }