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



我能够使用不安全的通道建立与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——请在下面找到您问题的答案

  1. 您是使用IBM MQ Classes for Java还是使用IBM MQ Class for JMS?我正在使用IBM MQ Classes for Java

  2. 您使用的jar文件来自哪个版本的IBM MQ?

    版本7

  3. 您尝试连接到的队列管理器是MQ的哪个版本?

    版本8

  4. 您是否试图让MQ验证客户端证书(检查SVRCONN通道上SSLCAUTH的值)

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

  5. 粘贴尝试连接时出现在队列管理器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文件的路径");

相关内容

  • 没有找到相关文章

最新更新