4 Stimmen

Senden an MQ aus Java verwendet immer die standardmäßig installierte mqm-Benutzerkennung für IBM MQ Version 6.0

Unser Code läuft in Weblogic und wir MQ 6.0. Egal ob ich die Standard createQueueConnection() o createQueueConnection("myuserid","mypassword") es scheint immer userid zu verwenden mqm . Siehe Code unten.

Wenn ich eine Verbindung von Version 6.0 zu einer älteren mq-Installation 5 herstelle, scheint der folgende Fehler aufzutreten javax.jms.JMSSecurityException: MQJMS2013: invalid security authentication supplied for MQQueueManager unter Verwendung der Standard createQueueConnection() es sei denn, ich sende eine leere Benutzerkennung/Kennwort wie in createQueueConnection("","")

Wie kann ich myuserid stattdessen senden lassen?

Hashtable properties = new Hashtable(2);
properties.put(Context.PROVIDER_URL,context);
properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");

InitialContext ctx = new InitialContext(properties);
QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("QCF");
QueueConnection qc = qcf.createQueueConnection();
javax.jms.Queue q = (javax.jms.Queue) ctx.lookup("MYQUEUE");
QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
TextMessage tm = qs.createTextMessage();
tm.setText(outString);
QueueSender sender = qs.createSender(q);
sender.send(tm);
sender.close();
qs.close();
qc.close();

3voto

T.Rob Punkte 31064

Wenn Sie die ID in der createQueueConnection setzen, können Sie sicher sein, dass sie est die dem Warteschlangenmanager vorgelegt werden. Das Problem, das Sie sehen, ist, dass die SVRCONN-Kanaldefinition auf dem QMgr hat den Wert MCAUSER('mqm') fest einprogrammiert. Dieser überschreibt jeden von der Client-Anwendung angegebenen Wert.

Hier gibt es einige Dinge zu beachten.

  1. Obwohl Sie die ID und das Kennwort senden können, akzeptiert WMQ diese als bare Münze. Die Felder sind vorhanden, um die Anmeldeinformationen für einen Channel-Exit verfügbar zu machen, der sie validieren kann. Ohne einen solchen Exit läuft der Channel einfach als die ID, die die Anwendung vorgibt zu sein, und das Kennwort wird ignoriert.
  2. Aus dem oben genannten Grund sage ich den Leuten immer, dass sie den vorgelegten Bescheinigungen nicht trauen sollen, wenn sie nicht über einen solchen Ausgang verfügen. Der Administrator muss den entsprechenden Wert in den MCAUSER kodieren.
  3. Die administrative ID ("mqm" auf UNIX-Systemen) ist NICHT der richtige Wert. Sie verleiht jedem, der eine Verbindung zu diesem Kanal herstellt, administrative Rechte.

Viel mehr zu diesem Thema und Hinweise auf die WMQ-Sicherheitspräsentation und den WMQ Security Lab Guide von IMPACT finden Sie unter diese SO-Frage .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X