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 的信息中心。下面,主要介绍三种认证方式的实现。
MQ7.1及高版本的新特性