2017-10-10 263 views
-1

我能夠建立使用不安全的通道連接到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

回答

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文件」);