Java IBM MQ的深度

Java IBM MQ的深度,java,ssl,ibm-mq,pcf,Java,Ssl,Ibm Mq,Pcf,您能帮助我吗?我正在尝试通过SSL通道通过PCFAgent查找ibm mq深度 Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl"); Security.setProperty("ssl.ServerSocketFactory.provider", "com.ibm.jsse2.SSLServerSocketFactoryImpl"); System.s

您能帮助我吗?我正在尝试通过SSL通道通过PCFAgent查找ibm mq深度

Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl");
     Security.setProperty("ssl.ServerSocketFactory.provider", "com.ibm.jsse2.SSLServerSocketFactoryImpl");
     System.setProperty("javax.net.ssl.trustStore","abc-dev.jks");
     System.setProperty("javax.net.ssl.trustStorePassword","abcdabcd");

     System.setProperty("javax.net.ssl.keyStore", "abc-dev.jks");
     System.setProperty("javax.net.ssl.keyStorePassword", "abcdabcd");

     MQEnvironment.sslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA";



    int attrs[] = { 2016, 3 };
    System.out.println("parameter creation");
    PCFParameter parameters[] = { new MQCFST(2016, "*"), new MQCFIN(20, 1),
            new MQCFIL(1002, attrs) };
    String name = null;
    Integer depth = null;
    System.out.println("parameter creation end");



    try {
        PCFAgent agent;
        if (args.length == 1) {
            System.out.print("Connecting to local queue manager " + args[0]
                    + "... ");
            agent = new PCFAgent(args[0]);
        } else {
            System.out.print("Connecting to queue manager at " + args[0]
                    + ":" + args[1] + " over channel " + args[2] + "... ");
            agent = new PCFAgent(args[0], Integer.parseInt(args[1]),
                    args[2]);
        }
        System.out.println("Connected.");
        System.out.print("Sending PCF request... ");
        com.ibm.mq.MQMessage responses[] = agent.send(13, parameters);
        System.out.println("Received reply.");
        for (int i = 0; i < responses.length; i++) {
            MQCFH cfh = new MQCFH(responses[i]);
            if (cfh.reason == 0) {
                for (int j = 0; j < cfh.parameterCount; j++) {
                    PCFParameter p = PCFParameter
                            .nextParameter(responses[i]);
                    switch (p.getParameter()) {
                    case 2016:
                        name = (String) p.getValue();
                        break;

                    case 3: // '\003'
                        depth = (Integer) p.getValue();
                        break;
                    }
                }

                System.out.println("Queue " + name + " curdepth " + depth);
            } else {
                System.out.println("PCF error:\n" + cfh);
                for (int j = 0; j < cfh.parameterCount; j++)
                    System.out.println(PCFParameter
                            .nextParameter(responses[0]));

            }
        }

        System.out.print("Disconnecting... ");
        agent.disconnect();
        System.out.println("Done.");
    } catch (ArrayIndexOutOfBoundsException abe) {
        System.out
                .println("Usage: \n\tjava ListQueueDepth queue-manager\n\tjava ListQueueDepth host port channel");
    } catch (NumberFormatException nfe) {
        System.out.println("Invalid port: " + args[1]);
        System.out
                .println("Usage: \n\tjava ListQueueDepth queue-manager\n\tjava ListQueueDepth host port channel");
    } catch (MQException mqe) {
        System.err.println(mqe);
    } catch (IOException ioe) {
        System.err.println(ioe);
    }
Security.setProperty(“ssl.SocketFactory.provider”、“com.ibm.jsse2.sslsocketfactorympl”);
setProperty(“ssl.ServerSocketFactory.provider”、“com.ibm.jsse2.sslserversocketfactorympl”);
setProperty(“javax.net.ssl.trustStore”、“abc-dev.jks”);
setProperty(“javax.net.ssl.trustStorePassword”、“abcdabcd”);
setProperty(“javax.net.ssl.keyStore”、“abc-dev.jks”);
setProperty(“javax.net.ssl.keystrepassword”、“abcdabcd”);
MQEnvironment.sslCipherSuite=“TLS\u RSA\u带AES\u 128\u CBC\u SHA”;
int attrs[]={2016,3};
System.out.println(“参数创建”);
PCFParameter参数[]={new MQCFST(2016,“*”),new MQCFIN(20,1),
新的MQCFIL(1002,attrs)};
字符串名称=null;
整数深度=空;
System.out.println(“参数创建结束”);
试一试{
PCF试剂;
如果(args.length==1){
System.out.print(“连接到本地队列管理器”+args[0]
+ "... ");
代理=新的PCFAgent(args[0]);
}否则{
System.out.print(“在“+args[0]处连接到队列管理器”
+“:“+args[1]+”通过通道“+args[2]+”);
agent=new PCFAgent(args[0],Integer.parseInt(args[1]),
args[2]);
}
System.out.println(“已连接”);
系统输出打印(“发送PCF请求…”);
com.ibm.mq.MQMessage responses[]=agent.send(13,参数);
System.out.println(“收到回复”);
对于(int i=0;i
当我尝试远程运行此程序时,出现以下异常:

com.ibm.mq.MQException:MQJE001:完成代码2,原因2035

编辑以添加评论中的其他澄清细节:

MQ管理员在应用程序接收2035命令的同时,在与SYSTEM.DEFAULT.MODEL.QUEUE相关的
AMQERR01.LOG
中发现错误


当我取下安全设置和密码套件时,相同的程序适用于非SSL通道。

好吧,我看不出您在代码中的何处设置了用户ID。因此,您发送的是一个空的UserID,如果通道的MCAUSER为空,则意味着由于旧的安全漏洞,它将成为“mqm”UserID

对于MQ v7.1或更高版本,如果您在“系统”通道上,则默认的CHLAUTH规则将阻止连接。对于MQ v8.0或更高版本,通道可能需要用户ID和密码。您需要查看事件队列或队列管理器日志,了解2035年RC(未授权)的原因

另外,硬编码值是什么?你是否反编译了其他人的程序

为什么不使用IBM MQ提供的定义?下面是它的外观:

int[] attrs = {
                CMQC.MQCA_Q_NAME,
                CMQC.MQIA_CURRENT_Q_DEPTH
              };
PCFParameter[] parameters = {
                               new MQCFST (CMQC.MQCA_Q_NAME, "*"),
                               new MQCFIN (CMQC.MQIA_Q_TYPE, CMQC.MQQT_LOCAL),
                               new MQCFIL (CMQCFC.MQIACF_Q_ATTRS, attrs)
                            };

PCFAgent
类为来自命令服务器的响应消息创建一个动态队列。默认情况下,使用的模型队列是
SYSTEM.default.model.queue
。用户需要在模型队列上具有OAM权限
+get+dsp

如果程序在连接到非SSL通道时工作,则连接必须解析为具有针对
SYSTEM.DEFAULT.MODEL.QUEUE
的所需OAM权限的其他用户ID

队列管理器的
AMQERR01.LOG
中的错误将显示缺少权限的用户ID以及缺少的特定权限


根据您使用的MQ客户机jar文件的版本,如果未指定用户ID,MQ客户机将发送空白用户ID或java进程正在运行的用户ID。在队列管理器端,如果通道的
MCAUSER
属性为空,则它将继承mqm(如果接收到空的UserID)或进程运行时使用的UserID。如果通道的
MCAUSER
属性不为空,则表示将用于权限的用户标识。

是否仅针对SSL通道需要设置用户标识和密码?因为当我取下安全设置和密码套件时,相同的程序适用于非SSL通道。如果这是因为它是一个SSL通道,请让我知道我需要在这里设置什么用户ID和密码?你认为呢
int[] attrs = {
                CMQC.MQCA_Q_NAME,
                CMQC.MQIA_CURRENT_Q_DEPTH
              };
PCFParameter[] parameters = {
                               new MQCFST (CMQC.MQCA_Q_NAME, "*"),
                               new MQCFIN (CMQC.MQIA_Q_TYPE, CMQC.MQQT_LOCAL),
                               new MQCFIL (CMQCFC.MQIACF_Q_ATTRS, attrs)
                            };