文章介绍了 MQ 7.0 的">权限管理机制和 MQ 7.1 新引入的通道认证机制,并提供详细的实现命令供读者参考。通过概念与实例的结合,使用户对 MQ 的认证及权限管理有一个全面详实的认识。
在企业级解决方案中,WebSphere MQ 被广泛用于不同产品间的通信,包括金融及银行领域。在这些领域中,对系统的安全性特别敏感,这就要求 MQ 具有完善的安全机制,从而应对各种潜在的攻击。MQ 的认证和权限管理,是其中重要的环节。认证可以避免非法用户的访问,而授权可以保证用户具有合适的权限。通常,两者结合使用,可以构建良好的安全屏障。
MQ 认证
认证,通常是指验证一个用户或者应用程序真实合法的过程。在 MQ 中,主要分为基于连接的认证和基于消息的认证。基于连接的认证,是通过 MQ 通道实现的;基于消息的认证,则是通过 MQ 高级消息安全(MQ AMS)实现的。在本文中,主要讲述基于连接的认证。
MQ 主要支持三种不同的认证方式:断言认证,起源认证和证书认证。在 MQ 7.0 及以前的版本中,这些认证方式主要是依靠用户编写代码,即安全出口来实现。MQ 7.1 和 MQ 7.5 集成了这三种常用的认证功能。在 MQ 7.1/7.5 中,用户可以通过定义通道认证规则来过滤连接请求。下面,是这三种认证方式的定义。
断言认证:即基于用户 ID 或者队列管理器名字的认证。对于 MQI 通道,使用客户端的用户 ID 来完成认证;对于消息通道,则使用远程队列管理器名字。这是最基本的,安全性最低的认证方式。远程用户在连接请求中声明用户 ID 或者队列管理器名字,服务器端的队列管理器接受此 ID 的连接。严格意义上讲,这个过程只是对 ID 的识别,具有非常弱的认证功能。通常,这种方式多用于查询的场景中。
起源认证:即基于 IP 地址的认证。在认证过程中,队列管理器会查看连接请求的 IP 地址,并根据已有规则决定是否接受该请求。这种认证方式,具有一定的 IP 过滤功能,从而实现基于 IP 的认证。
证书认证:这是最为严格,安全级别最高的认证方式。在连接过程中,连接请求者使用证书私钥加密随机字符串并发送到队列管理器。队列管理器会使用相应的证书公钥解密字符串。如果成功,队列管理器可以确定该连接请求者拥有合法的证书。
在 MQ 7.1 中,这三种认证方式是通过通道认证记录来实现的。通道认证记录定义了一组规则。当远程客户端或者队列管理器发来连接请求时,服务器端队列管理器可以基于这些规则检查连接参数(例如:用户 ID,IP 地址)并做出相应决定。比如,阻止来自某 IP 的连接。下面的章节介绍了如何使用通道认证记录实现断言认证、起源认证和证书认证。
通道认证记录
通道认证记录是 MQ 7.1 引入的安全功能,用来保证通道连接的合法性。MQ 7.5 具有同样的安全功能,因此本文介绍的实例也适用于 MQ 7.5。它主要通过阻止非法连接和映射远程连接到本地合法 ID 来实现该功能。用户可以使用 MQSC 命令、PCF 命令或者 MQ 资源管理器来定义通道认证记录。本文主要介绍比较常用的 MQSC 命令和 MQ 资源管理器两种方式。
在默认情况下,MQ 定义了三条通道认证记录,来保证访问的安全性。下面,通过讲解这三条记录来了解 MQSC 命令 SET CHLAUTH 的使用。
清单 1. 通道认证默认记录
SET CHLAUTH('*') TYPE(BLOCKUSER) USERLIST('*MQADMIN') SET CHLAUTH('SYSTEM.*') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(NOACCESS)
第一条记录:阻止所有特权用户远程访问队列管理器。类型是 BLOCKUSER,用户列表是 MQADMIN,表示所有特权用户,主要指 mqm 用户组内的用户。在 MQ 7.1 以前的版本中,很多用户习惯显式设置 MCAUSER 为 mqm,从而比较方便的实现远程访问。在 MQ 7.1 及以后的版本中,这种方式不再被支持。
第二条记录:阻止所有对 SYSTEM 通道的连接。类型是 ADDRESSMAP,而地址是“*”,表示所有地址。最后,NOACCESS 作用等同于拦截连接。
第三条记录:这条记录是基于第二条记录的,表示只有系统通道 SYSTEM.ADMIN.SVRCONN 可以被远程访问。
关于 SET CHLAUTH 的详细参数介绍,请参考 MQ 7.1 的信息中心。下面,主要介绍三种认证方式的实现。
断言认证的实现
这种方法是将远程的用户 ID 或者队列管理器名字映射到本地 ID。首先,使用 MQ 资源管理器实现该映射。从 MQ 资源管理器面板选择要操作的队列管理器,并展开其通道部分。右键点击“通道认证记录”来新建一个通道认证记录,弹出第一个窗口。
图 1. 创建通道认证记录
在这个窗口中,可以选择新规则的用途。选择“允许访问”表示允许运程连接;选择“阻止访问”表示拦截远程连接。点击“下一步”,进入下一页面。
图 2. 选择匹配类型
从上图可以看到,可以选择 SSL/TLS 主题的专有名称、客户机应用程序用户标识、远程队列管理器名称或者 IP 地址和本地用户 ID 匹配。在本例中,选择客户机应用程序用户标识,进入下一步。
图 3. 选择通道
在这一步中,选择该规则所应用的一个或者多个通道。由于前面选择了“客户机应用程序用户标识”,因此该规则仅应用于服务器连接通道。如果选择“远程队列管理器名称”,则对应的通道应该为服务器通道或者接收通道。在设定好通道以后,就需要设置远程客户机用户标识。