【发布时间】:2017-10-29 14:34:23
【问题描述】:
我能够使用不安全的通道与 QManager 建立连接,并且能够做任何我想做的事情。
但现在我正在尝试通过安全通道连接到同一个 QManage;我已经获得了从 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 Classes for Java 还是 IBM MQ Classes for JMS? 我正在使用用于 Java 的 IBM MQ 类
-
您使用的 jar 文件来自哪个版本的 IBM MQ?
第 7 版
-
您尝试连接的队列管理器是哪个版本的 MQ?
版本 8
-
您是否尝试让 MQ 验证客户端证书(检查 SVRCONN 通道上 SSLCAUTH 的值)
是的。我有 MQ Admin 从 MQ 服务器生成的公钥和私钥(我无权访问 MQ 服务器),需要使用它来连接到 MQ 服务器。
粘贴尝试连接时出现在队列管理器 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();
}
}
【问题讨论】:
-
请点击您问题下方的“编辑”链接并添加更多详细信息。 1. 您使用的是 IBM MQ Classes for Java 还是 IBM MQ Classes for JMS? 2. 您使用的 jar 文件来自哪个版本的 IBM MQ? 3. 您尝试连接的队列管理器是哪个版本的 MQ? 4. 您是否尝试让 MQ 验证客户端证书(检查 SVRCONN 通道上 SSLCAUTH 的值) 5. 粘贴在您尝试连接时出现在队列管理器 AMGERR01.LOG 中的所有错误。提供在没有 TLS 的情况下工作的最小代码示例以及在 TLS 情况下失败的代码。
-
@JoshMc - 请找到我对您问题的回答。谢谢。
-
请提供具体版本。
-
@JoshMc -- 哪个版本?我在属性中看到的 MQ 管理器是 08000005,MQ Java 类版本是 7.0.1.4。
-
请编辑问题以包含完整版本。你用的是什么jre?您使用的是哪个密码套件? svrconn 通道上设置了哪个密码规范?
标签: ibm-mq