【问题标题】:JAVA MQ SSL\TLS connection with IBM MQ V8 jars not working与 IBM MQ V8 jar 的 JAVA MQ SSL\TLS 连接不起作用
【发布时间】:2016-06-23 14:36:26
【问题描述】:
MQQueueConnectionFactory cf = new MQQueueConnectionFactory();

  // Config
  cf.setHostName("XXXXXXX");
  cf.setPort(1414);
  cf.setTransportType(1);
  cf.setQueueManager("XXXXXXXX");
  cf.setChannel("XXXXXXXX");
  cf.setSSLCipherSuite("TLS_RSA_WITH_AES_128_CBC_SHA");

// SSLSocketFactory factory = (SSLSocketFactory)SSLSocketFactory.getDefault();
// cf.setSSLSocketFactory(factory);

  MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();
  MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
  MQQueue queue = (MQQueue) session.createQueue("queue:///QUEUE.NAME");
  MQQueueSender sender =  (MQQueueSender) session.createSender(queue);
  MQQueueReceiver receiver = (MQQueueReceiver) session.createReceiver(queue);      

  long uniqueNumber = System.currentTimeMillis() % 1000;
  JMSTextMessage message = (JMSTextMessage) session.createTextMessage("SimplePTP "+ uniqueNumber);     
  message.setJMSExpiration(15l);
  // Start the connection
  connection.start();

  sender.send(message);
  System.out.println("Sent message:\\n" + message);

  JMSMessage receivedMessage = (JMSMessage) receiver.receive(10000);
  System.out.println("\\nReceived message:\\n" + receivedMessage);

上面的代码不起作用,我得到下面的错误 com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2059' ('MQRC_Q_MGR_NOT_AVAILABLE').

为了澄清,我在 VM 参数中给出了正确的密钥库、信任库。但不知何故,在 SSL 握手时密钥库没有被拾取。

但如果我在代码中添加以下两行...

  SSLSocketFactory factory = (SSLSocketFactory)SSLSocketFactory.getDefault();
  cf.setSSLSocketFactory(factory);

...它有效!!!!看起来好像版本 8 jar 无法创建默认 SSLSocketFactory。

有什么想法吗? 7.5 版的 jars 可以在没有这两行的情况下工作。

【问题讨论】:

    标签: java ssl jms ibm-mq


    【解决方案1】:

    这听起来像是一个配置问题,可能是由于错误的CLASSPATH,但也可能是其他配置问题。

    最快的做法是验证您的设置是否符合 IBM 的规范,如 IBM MQ classes for Java 的安装和配置中所述,特别是 Environment variables relevant to IBM MQ classes for Java 部分>。检查CLASSPATH指定的目录中是否没有旧库。

    另外,查看java/bin 目录中的setjmsenv 脚本。这些是在运行 JMS 程序之前获取的。即使您正在使用 MQ Java 类,您也可以在运行脚本中使用它们,或者查看它们以了解它们的作用以及这些类所依赖的设置。

    我假设您尚未完成此级别的验证,因为原始问题并未提及已执行任何标准故障排除。它确实提到的是以前使用了不同版本的 jar 文件,如果所做的只是将新 jar 交换到旧配置中,那么奇怪的行为就是预期的结果。如果您执行了一些故障排除并验证了您的设置,请使用相关详细信息更新您的问题。

    如果CLASSPATH 和其他配置元素经过健全性检查并且这种情况仍然存在,请查看它是否发生在 Verifying your IBM MQ classes for Java installation with the sample application 中所述的 IVT 程序中。由于 IVT 程序是已知良好的代码,因此它的行为将有助于确定问题是 MQ 中的问题还是您的设置中的问题。

    【讨论】:

      猜你喜欢
      • 2015-01-24
      • 2018-11-09
      • 1970-01-01
      • 2019-12-31
      • 2022-08-19
      • 1970-01-01
      • 2013-11-08
      • 2020-01-12
      • 1970-01-01
      相关资源
      最近更新 更多