繁体   English   中英

无法从Windows中的java连接到MQ

[英]can't connect to MQ from java in windows

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

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

我尝试了一个从MQ8安装Tools的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 '????'.

有一篇很棒的MQ安全博客文章描述了如何配置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字段设置为不存在的用户 - 例如“nobody”。 然后,您可以定义新的通道身份验证规则,该规则允许您的Java应用程序采用您选择的用户ID,而不是默认用户“nobody”。 例如,该规则可以是ADDRESSMAP规则,该规则允许从特定IP地址连接的任何客户端连接到新通道并采用您选择的用户ID。

综上所述:

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

2)定义一个新的非SYSTEM通道,MCAUSER设置为'nobody',例如

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选项,请参阅知识中心。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM