2011-05-16 74 views
6

我有一个WebSphere 6实例和一个WebSphere 7实例。每个实例都有一个WebSphere MQ消息传递提供程序,一个队列连接工厂和一个以类似方式配置的队列。所有用户ID字段留空,并且认证别名保留在“无”。WebSphere 7,配置没有用户标识的JMS Q连接工厂:MQRC_NOT_AUTHORIZED

在WAS6中它工作正常。

在WAS7我得到一个错误:

JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'MYQMNGR' with connection mode 'Client' and host name '10.11.22.33(51001)'.; nested exception is com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'MYQMNGR' with connection mode 'Client' and host name '10.11.22.33(51001)'. Please check if the supplied username and password are correct on the QueueManager you are connecting to; nested exception is com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').

如果没有用户ID提供什么可WAS7连接到MQ相比WAS6的方式有什么不同?

我没有任何可见性或访问该MQ(版本7),它从WAS 6访问时不需要用户ID,所以我需要让WAS7工作相同。

回答

12

在WAS 6中,如果您将用户标识留在管理面板空白处,则将空白传递给WMQ。即使无法确定远程用户,WMQ也会运行该通道,并且在这种情况下,通道将使用始终处于管理状态的消息通道代理(MCA)的权限运行。因此,在V6中,它起作用。

自V7开始,WMQ客户端将尝试更加困难地确定在WAS管理控制台中将其留为空白并通过CONNECT调用传递该ID的JVM ID。这是2035的来源。

解决此问题的正确方法是WMQ管理员应该在SVRCONN通道的MCAUSER字段中放置一个低特权ID。该ID应该被授权给Java EE服务器需要的任何队列,但不能授予命令队列和各种其他管理队列。这将解决WAS 7发送无法识别的ID 的问题,它可以防止任何类型的远程客户端在该频道上获得管理员访问权限。

另一种方法是转到WAS管理面板进行WMQ连接,并将用户标识设置为mqm。 (如果WMQ运行在分布式非Windows系统上,这将起作用。如果WMQ在Windows,z/OS或其他平台上运行,请在此代替平台等效标识。)虽然这会使WAS启动并运行,但它不会解决QMgr暴露管理访问的事实。

请参阅WMQ Hardening演示文稿和实验室,网址为http://t-rob.net/links,以获取有关如何识别和修复QMgr基础安全风险的更全面说明。

+0

非常明确和有效的答案。非常感谢你! – 2011-05-16 06:50:51

+1

感谢Maxim发布这个灼热的问题,也感谢T.Rob的确切答案 – 2012-08-22 15:16:38