我能够使用不安全的通道建立与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 Class for JMS?我正在使用IBM MQ Classes for Java
您使用的jar文件来自哪个版本的IBM MQ?
版本7
您尝试连接到的队列管理器是MQ的哪个版本?
版本8
您是否试图让MQ验证客户端证书(检查SVRCONN通道上SSLCAUTH的值)
是的。我有MQ管理员从MQ服务器生成的公钥和私钥(我无法访问MQ服务器),需要使用它连接到MQ服务器。
粘贴尝试连接时出现在队列管理器AMQERR01.LOG中的任何错误。
我没有访问日志文件的权限。
以下是工作代码;我可以连接到不安全的信道并发送消息
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();
}
}
您缺少从代码中指定要使用的密码套件的选项:MQ环境.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文件的路径");