我有一个WebSphere 6实例和一个WebSphere 7实例。每个实例都有一个WebSphere MQ消息传递提供程序,一个队列连接工厂和一个以类似方式配置的队列。所有用户ID字段都留空,Authentication别名保留为“none”。
在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工作相同。
答案 0 :(得分:12)
在WAS 6中,如果您将管理面板中的用户ID留空,则会将空白传递给WMQ。 WMQ将运行该通道,即使它无法确定远程用户,并且在这种情况下,该通道以消息通道代理(MCA)的权限运行,该通信代理始终是管理的。因此,在V6中,它可以工作。
从V7开始,如果您在WAS管理面板中将其留空,WMQ客户端将尝试更难确定要传递的ID,并获取JVM ID并在CONNECT
调用时传递该ID。这是2035年的来源。
解决此问题的正确方法是WMQ管理员应在SVRCONN频道的MCAUSER字段中放置一个低权限ID。该ID应授权给Java EE服务器所需的任何队列,但不授权给命令队列和各种其他管理队列。这将解决WAS 7发送无法识别的ID 和的问题,它可以防止任何类型的远程客户端在该通道上获得管理员访问权限。
另一种方法是转到WAS管理面板以获取WMQ连接,并将用户ID设置为mqm
。 (如果WMQ在分布式非Windows系统上运行,则此方法有效。如果WMQ在Windows,z / OS或其他方面运行,请在此处替换平台等效ID。)虽然这将使WAS启动并运行,但它无法解决事实上,QMgr暴露了管理访问权。
请参阅http://t-rob.net/links处的WMQ强化演示文稿和实验室,以获得有关如何识别和修复QMgr基础安全风险的更全面说明。