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

问题描述:

我能够建立使用不安全的通道连接到QManager和能够做我想做的事情永远。连接到MQ使用安全密钥(公钥和私钥)

但现在我试图通过安全通道连接到相同的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 - 请您在使用IBM MQ类的Java或IBM MQ类的JMS找到答案下面

  1. 你的问题? 我正在使用适用于Java的IBM MQ类

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

    版本7

  3. 什么版本的MQ的是你试图连接到队列管理器?

    版本8

  4. 您是否试图拥有MQ验证客户端证书(请在SVRCONN通道SSLCAUTH的值)

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

  5. 粘贴在队列管理器AMQERR01.LOG显示当你试图连接任何错误。

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

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

公共无效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(); 
    } 

}

+0

请点击你的问题下的“编辑”链接,并添加一些更多的细节。 1.您正在使用用于Java的IBM MQ Classes或用于JMS的IBM MQ Classes? 2.哪个版本的IBM MQ是您正在使用的jar文件? 3.您尝试连接的队列管理器的MQ版本是什么? 4.您是否尝试让MQ验证客户端证书(检查SVRCONN通道上的SSLCAUTH值)5.粘贴尝试连接时队列管理器AMQERR01.LOG中显示的任何错误。提供最少的代码示例,这些代码可以在不使用TLS的情况下运行,并且代码使用TLS失败。 – JoshMc

+0

@JoshMc - 请找到我的回答你的问题。谢谢。 –

+0

请提供具体的版本。 – JoshMc

你缺少指定从您的代码中使用的密码套件的选项: 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文件”);