无法在Windows中从java连接到MQ

时间:2016-01-13 17:41:11

标签: java ibm-mq

我在Windows 8中安装了Websphere MQ 8服务器,

使用MQ Explorer: 我使用端口MAJID.QUEUE.MANAGER创建了一个队列管理器1419。 我在端口TCP上创建了一个1419侦听器。

我尝试了一个从MQ8安装工具的java程序,它运行如下:

 PCF_ListQueueNames  MAJID.QUEUE.MANAGER 10.196.67.99 1419

但我只有:

 Completion Code '2', Reason '2035'.

更新:

日志文件说:

AMQ9777: Channel was blocked

 EXPLANATION:
 The inbound channel 'SYSTEM.DEF.SVRCONN' was blocked from address 'ITD-     968735
 (192.168.56.1)' because the active values of the channel matched a record
  configured with USERSRC(NOACCESS). The active values of the channel were
  'CLNTUSER(alotfi) ADDRESS(ITD-968735)'.
  ACTION:
  Contact the systems administrator, who should examine the channel
  authentication records to ensure that the correct settings have been
  configured. The ALTER QMGR CHLAUTH switch is used to control whether  channel
  authentication records are used. The command DISPLAY CHLAUTH can be used  to
  query the channel authentication records. 
  ----- cmqxrmsa.c : 1461 -------------------------------------------------------
  1/13/2016 15:55:13 - Process(9988.27) User(MUSR_MQADMIN) Program(amqrmppa.exe)
                  Host(ITD-968735) Installation(Installation1)
                  VRMF(8.0.0.4) QMgr(MAJID.QUEUE.MANAGER)

    AMQ9999: Channel 'SYSTEM.DEF.SVRCONN' to host '192.168.56.1' ended abnormally.

   EXPLANATION:
   The channel program running under process ID 9988(8292) for channel
   'SYSTEM.DEF.SVRCONN' ended abnormally. The host name is '192.168.56.1'; in some
   cases the host name cannot be determined and so is shown as '????'.

1 个答案:

答案 0 :(得分:3)

有一个great MQ security blog article描述了如何配置MQ以让客户端安全连接(即不关闭安全功能)。

但是,要解决您的特定问题,新MQ 8队列管理器的默认通道身份验证规则会阻止客户端通过SYSTEM。*通道连接到队列管理器。如果在新的MQ 8队列管理器上运行DIS CHLAUTH(*) ALL,您将看到:

DIS CHLAUTH(*) ALL
     2 : DIS CHLAUTH(*) ALL
AMQ8878: Display channel authentication record details.
   CHLAUTH(SYSTEM.ADMIN.SVRCONN)           TYPE(ADDRESSMAP)
   DESCR(Default rule to allow MQ Explorer access)
   CUSTOM( )                               ADDRESS(*)
   USERSRC(CHANNEL)                        CHCKCLNT(ASQMGR)
   ALTDATE(2016-01-14)                     ALTTIME(16.15.20)
AMQ8878: Display channel authentication record details.
   CHLAUTH(SYSTEM.*)                       TYPE(ADDRESSMAP)
   DESCR(Default rule to disable all SYSTEM channels)
   CUSTOM( )                               ADDRESS(*)
   USERSRC(NOACCESS)                       WARN(NO)
   ALTDATE(2016-01-14)                     ALTTIME(16.15.20)
AMQ8878: Display channel authentication record details.
   CHLAUTH(*)                              TYPE(BLOCKUSER)
   DESCR(Default rule to disallow privileged users)
   CUSTOM( )                               USERLIST(*MQADMIN)
   WARN(NO)                                ALTDATE(2016-01-14)
   ALTTIME(16.15.20)

第二条规则阻止所有客户端连接到名为SYSTEM。*的通道。这适用于您,因为您正在连接到SYSTEM.DEF.SVRCONN。

您可能希望为应用程序定义新的SVRCONN通道,以便连接并使用它而不是SYSTEM.DEF.SVRCONN。

定义新渠道时,MQ安全最佳做法是将渠道的MCAUSER字段设置为不存在的用户 - 例如“无人”。然后,您可以定义新的通道身份验证规则,该规则允许您的Java应用程序采用您选择的用户ID,而不是默认用户' nobody'。例如,规则可以是ADDRESSMAP规则,允许从特定IP地址连接的任何客户端连接到新通道并采用您选择的用户ID。

总结:

1)选择系统中存在的有效用户(但不在' mqm'组中)

2)定义一个新的非SYSTEM通道,将MCAUSER设置为“无人”,例如

DEFINE CHANNEL(MY.FIRST.CHANNEL) CHLTYPE(SVRCONN) MCAUSER('nobody')

3)定义一个新的通道验证规则,允许从客户端的IP地址进行连接,并采用您定义的用户,例如

SET CHLAUTH(MY.FIRST.CHANNEL) TYPE(ADDRESSMAP) ADDRESS('192.168.56.1') USERSRC(MAP) MCAUSER('validuser') ACTION(REPLACE)

您还需要执行一个步骤。您需要告诉MQ' validuser'允许连接,放置和/或获取消息。您可以使用SET AUTHREC来定义客户端应具有的权限。有关有效的AUTHREC选项,请参阅the KnowledgeCenter

以上是如何配置MQ以让客户端连接的示例。您应该使用我已链接到的知识库和知识中心等博客文章的组合来按需要设置您的安全性。例如,您可能希望使用TLS证书来验证您的Java客户端,我上面没有描述过。