使用安全密钥(公共和私钥)

时间:2017-10-10 21:56:23

标签: ibm-mq

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

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

我用Google搜索并找到了一些答案,其中提出了以下方法,但它无效。

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 - 请在下面的问题中找到答案

  1. 您是使用IBM MQ Classes for Java还是IBM MQ Classes for JMS? 我正在使用IBM MQ Classes for Java

  2. 您使用的jar文件是哪个版本的IBM MQ?

    第7版

  3. 您尝试连接的队列管理器是哪个版本的MQ?

    版本8

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

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

  5. 粘贴尝试连接时显示在队列管理器AMQERR01.LOG中的所有错误。

  6. 我无法访问日志文件。

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

    public void MQSender(){

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

    }

1 个答案:

答案 0 :(得分:1)

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

此知识中心文章可能有所帮助:https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q031220_.htm

您是否在JKS商店拥有值得信赖的证书和私人证书/密钥对? 这些应该更像是:

  

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

     

System.setProperty(" javax.net.ssl.keyStore"," JKS文件的路径,包含客户端的证书和私钥");