我正在使用IBM WebSphere MQ 8.x
,并希望保护它。
如何使用用户名/密码保护我的WebSphere Queue Messaging,以便只有有效的用户才能执行操作。
这就是我现在访问队列的方式
Context jndiContext = getInitialContext();
String qcf= getJMSDetailsBean().getQueueConnectionFactory();
QueueConnectionFactory qconFactory = (QueueConnectionFactory) jndiContext.lookup(qcf);
qcon = qconFactory.createQueueConnection();
您能在下面指导我吗?
QueueConnectionFactory
访问MQ?谢谢
答案 0 :(得分:0)
与技术中的许多其他事物一样,有多种方法可以完成您要询问的任务,下面介绍了一种使用IBM MQ提供的功能的方法。
首先要回答一个简单的问题,如果要将用户名和密码传递给MQ,可以使用用户名和密码作为参数调用createQueueConnection
createQueueConnection("username", "password")
在MQ方面,如果可以升级,我建议您升级到9.0.0.5 LTS,如果不能升级到v9.0,那么我建议您升级到8.0.0.10 + IFIX IT25591,可以下载顶部APAR页上的此权限的IFIX。
您没有提及队列管理器在哪个操作系统上运行。对于大多数操作系统版本,您可以配置队列管理器以针对操作系统(IDPWOS
)或LDAP(IDPWLDAP
)验证凭据。您可以将QMGR CONNAUTH
属性指向带有以上任一选项的AUTHINFO
的{{1}}对象。
在Linux等Unix操作系统上,您可以将AUTHTYPE
身份验证方法(IDPWOS
)配置为AUTHENMD
(使用crypt并与影子密码条目进行比较)或OS
(使用可插拔身份验证模块)。如果您使用PAM
,我建议您使用IDPWOS
,因为它可以提供加密和比较支持(与PAM
方法相同),而且还支持您可以使用PAM进行的所有操作,例如,针对Windows进行身份验证活动目录。
出于安全性考虑,您想告诉MQ采用通过身份验证的用户,这是OS
对象上的ADOPTCTX(YES)
设置。您应该在AUTHINFO
文件中为ChlauthEarlyAdopt=Y
配置队列管理器(请注意,这既是MQ v9.0.4 CD和更高版本以及9.1.0.0 LTS(也是9.1.1 CD)的默认行为。甚至更高。
如果您确定希望队列管理器上的每个qm.ini
通道都要求发送有效的用户名/密码,则可以在SVRCONN
对象上设置CHCKCLNT(REQUIRED)
。如果需要更详细,可以将其设置为AUTHINFO
,这意味着如果存在用户名和密码,则该密码必须对该用户名有效,但是这也意味着如果未提供密码,MQ将不会尝试身份验证。例如,如果您有一些现有渠道,在其中使用其他身份验证方法(例如TLS证书或安全出口),则可能需要这样做。如果在CHCKCLNT(OPTIONAL)
级别将其设置为OPTIONAL
,则可以设置QMGR
规则以将特定频道的设置提升到CHLAUTH
。
请记住,如果您对队列管理器CHCKCLNT(REQUIRED)
进行了任何更改,则需要运行CONNAUTH
才能使这些设置生效。
如果MQ客户端是MQ v8或更高版本,则默认情况下,密码在非TLS通道上发送时,将使用3DES加密保护。这里是Java和JMS客户端的例外,您必须启用MQCSP模式(兼容性)是默认设置。)
可以在REFRESH SECURITY TYPE(CONNAUTH)
中进行设置PasswordProtection=always
的设置,以确保MQ强制必须使用密码保护功能来保护密码,或者使用具有非NULL密码规范的TLS通道。这也意味着在非TLS通道上,任何小于v8的客户端都将被拒绝。
我将更新此答案,并提供一些示例命令来实现上述设置,请让我知道此答案是否朝着您想要的方向发展?
我扫描了Fix list for IBM MQ Version 8.0,发现以下与CONNAUTH或一般安全性相关的有趣内容,这些内容在8.0.0.3之后的版本中已得到修复,这不是完整列表,还有很多:
8.0.0.5:
8.0.0.6:
8.0.0.7:
8.0.0.8:
8.0.0.10:
8.0.0.11(尚未发布):