Sun Java logo     上一页      目录      索引      下一页     

Sun logo
Sun Java System Message Queue 3 2005Q1 管理指南 

第 7 章
管理安全性

作为管理员,您可以配置用来验证用户的用户系统信息库;定义访问控制;配置用来加密客户机-代理通信的安全套接字层 (SSL) 连接服务;以及设置代理启动时使用的密码文件。

本章包含以下小节:


验证用户

您负责维护用户列表、用户组及其用户系统信息库中的用户密码。各个代理实例可以使用不同的用户系统信息库。本节将说明如何创建、填充和管理系统信息库。

当用户尝试连接到代理时,代理将通过检查所提供的名称和密码对用户进行验证。如果名称和密码与代理特定的用户系统信息库(配置每个代理时要查阅)中的名称和密码相匹配,则允许该用户与代理建立连接。

系统信息库可以是下列类型之一:

使用平面文件用户系统信息库

Message Queue 提供了一个平面文件用户系统信息库,还提供了一个命令行工具 Message Queue 用户管理器 (imqusermgr),您可以使用它填充和管理平面文件用户系统信息库。以下各节介绍平面文件用户系统信息库以及如何使用 Message Queue 用户管理器实用程序 (imqusermgr) 来填充和管理该系统信息库。

创建用户系统信息库

平面文件用户系统信息库是特定于实例的。默认的用户系统信息库(名为 passwd)是为启动的每个代理实例创建的。此用户系统信息库所在的目录由与该系统信息库相关联的代理实例的名称标识(请参见附录 A“Message Queue 数据在特定操作系统中的位置”):

…instances/instanceName/etc/passwd

系统信息库创建时附带了两个条目(行),如下面的表 7-1 所示。

表 7-1 用户系统信息库中的初始条目 

用户名

密码

状态

admin

admin

admin

处于活动状态

guest

guest

anonymous

处于活动状态

使用这些初始条目时,Message Queue 代理安装后即可使用,不需要管理员进行干预。对于要使用的 Message Queue 代理,无需设置初始用户/密码。

使用初始 guest 用户条目时,客户机可以使用默认的 guest 用户名和密码连接到代理实例(例如,用于测试目的)。

使用初始 admin 用户条目时,您可以通过 imqcmd 命令,使用默认的 admin 用户名和密码管理代理实例。您应更新此初始条目以更改密码(请参见更改默认的管理员密码)。

以下各节说明如何填充和管理平面文件用户系统信息库。

用户管理器实用程序 (imqusermgr)

此用户管理器实用程序 (imqusermgr) 允许您编辑或填充平面文件用户系统信息库。本节介绍用户管理器实用程序。下文说明如何使用 imqusermgr 子命令完成特定任务。

有关 imqusermgr 命令的完整参考信息,请参见第 13 章“命令参考”

使用 imqusermgr 之前,请谨记以下内容:

子命令

imqusermgr 命令包含子命令 adddeletelistupdate

add 子命令     add 子命令将用户和关联的密码添加到指定的(或默认的)代理实例系统信息库中,并有选择地指定用户所属的组。子命令语法如下所示:

add [-i instanceName] -u userName -p passwd [-g group] [-s]

delete 子命令     delete 子命令从指定的(或默认的)代理实例系统信息库中删除指定用户。子命令语法如下所示:

delete [-i instanceName] -u userName [-s] [-f]

list 子命令     list 子命令显示指定的(或默认的)代理实例系统信息库中有关指定用户或所有用户的信息。子命令语法如下所示:

list [-i instanceName] [-u userName]

update 子命令     update 子命令更新指定的(或默认的)代理实例系统信息库中指定用户的密码和/或状态。子命令语法如下所示:

update [-i instanceName] -u userName -p passwd [-a state] [-s] [-f]

update [-i instanceName] -u userName -a state [-p passwd] [-s] [-f]

命令选项

表 7-2 列出了 imqusermgr 命令的选项。

表 7-2 imqusermgr 选项 

选项

说明

-a active_state

指定用户是否处于活动状态 (true/false)。true 表示处于活动状态。这是默认值。

-f

执行操作,无需用户确认。

-h

显示使用帮助。不执行命令行上的其他选项。

-i instanceName

指定此命令要应用到的代理实例用户系统信息库。如果未指定,则假定为默认的实例名称 imqbroker

-p passwd

指定用户密码。

-g group

指定用户组。有效值包括 adminuseranonymous

-s

设置静音模式。

-u userName

指定用户名。

-v

显示版本信息。不执行命令行上的其他选项。

在代理实例的用户系统信息库中添加用户条目时,您可以指定以下三个预定义组之一:adminuseranonymous。如果不指定任何组,则默认属于 user 组。

要更改某个用户所属的组,您必须删除该用户的条目,然后再添加一个用户条目并为其指定一个新组。

您不能重命名或删除这些系统创建的组,也不能创建新组。但是,您可以指定访问规则,定义该组的成员可以执行的操作。有关详细信息,请参见授权用户:访问控制属性文件

用户状态

向系统信息库中添加用户时,用户的默认状态是活动的。要使用户处于非活动状态,您必须使用 update 命令。例如,以下命令将使用户 JoeD 处于非活动状态:

imqusermgr update -u JoeD -a false

处于非活动状态的用户条目将保留在系统信息库中,但不能打开新连接。当某个用户处于非活动状态时,如果您试图添加具有相同名称的另一个用户,操作将失败。必须删除处于非活动状态的用户条目,或者更改新用户的名称,或者为新用户指定不同的名称。这样可以防止添加重复的用户名。

用户名和密码的格式

用户名和密码必须遵循以下原则:

填充和管理用户系统信息库

要在系统信息库中添加用户,可以使用 add 子命令。例如,以下命令将向默认代理实例用户系统信息库添加用户名为 Katharine,密码为 sesame 的用户。

imqusermgr add -u Katharine -p sesame -g user

要从系统信息库中删除用户,可以使用 delete 子命令。例如,以下命令将删除用户 Bob

imqusermgr delete -u Bob

要更改用户的密码或状态,可以使用 update 子命令。例如,以下命令将 Katharine 的密码更改为 aladdin

imqusermgr update -u Katharine -p aladdin

要列出一个或所有用户的相关信息,可以使用 list 命令。以下命令将显示用户名为 isa 的相关信息:

imqusermgr list -u isa

% imqusermgr list -u isa

代理实例的用户系统信息库:imqbroker

----------------------------------

用户名        组      活动状态

----------------------------------

isa          admin    true

以下命令将列出所有用户的相关信息:

imqusermgr list

% imqusermgr list

代理实例的用户系统信息库:imqbroker

--------------------------------------

用户名        组          活动状态

--------------------------------------

admin        admin        true

guest        anonymous    true

isa          admin        true

testuser1    user         true

testuser2    user         true

testuser3    user         true

testuser4    user         false

testuser5    user         false

更改默认的管理员密码

为安全起见,应该将 admin 的默认密码更改为只有您自己知道的密码。为此,需要使用 imqusermgr 工具。

以下命令将 mybroker 代理实例的默认管理员密码由 admin 更改为 grandpoobah

imqusermgr update mybroker -u admin -p grandpoobah

要快速确认此更改是否已生效,可以在代理实例运行时运行任何命令行工具。例如,以下命令将提示您输入密码:

imqcmd list svc mybroker -u admin

输入新密码 (grandpoobah) 将会被接受;而输入旧密码则会失败。

更改密码后,使用任何 Message Queue 管理工具(包含管理控制台)时都应该提供新密码。

使用 LDAP 服务器管理用户系统信息库

要使用 LDAP 服务器来管理用户系统信息库,请执行下列任务:

编辑实例配置文件

要使代理使用目录服务器,请设置代理实例配置文件 config.properties 中某些属性的值。这些属性使代理实例可在 LDAP 服务器中查询有关用户和组的信息。只要用户试图连接到代理实例或执行某些信息传送操作,代理就会查询 LDAP 服务器。

实例配置文件位于代理实例目录下的某个目录中。路径的格式如下:

…/instances/instanceName/props/config.properties

有关特定操作系统中实例目录位置的信息,请参见附录 A“Message Queue 数据在特定操作系统中的位置”


编辑配置文件以使用 LDAP 服务器
  1. 通过设置以下属性,指定您正在使用 LDAP 用户系统信息库:
  2. imq.authentication.basic.user_repository=ldap

  3. 设置 imq.authentication.type 属性,确定是以 Base64 编码的形式 (basic) 还是以 MD5 摘要的形式 (digest) 将密码从客户机传送给代理。使用 LDAP 目录服务器管理用户系统信息库时,必须将验证类型设置为 basic。例如,
  4. imq.authentication.type=basic

  5. 还必须设置控制 LDAP 访问的代理属性。这些属性存储在代理的实例配置文件中。本节后面部分说明并概述了这些属性。
  6. Message Queue 使用 JNDI API 与 LDAP 目录服务器进行通信。有关这些属性的语法及其所引用术语的详细信息,请参见 JNDI 文档。Message Queue 使用 Sun JNDI LDAP 提供商并使用简单验证。

    Message Queue 支持 LDAP 验证故障转移:可以为要试图进行的验证指定 LDAP 目录服务器列表(请参见 imq.user.repos.ldap.server 属性的参考信息)。

    请参见代理的 config.properties 文件,了解如何设置 LDAP 用户系统信息库相关属性的示例。

  7. 必要时还需要编辑访问控制属性文件中的用户/组和规则。有关使用访问控制属性文件的详细信息,请参见授权用户:访问控制属性文件
  8. 如果您希望代理在连接验证和组搜索时通过 SSL 与 LDAP 目录服务器进行通信,您需要在 LDAP 服务器中激活 SSL,然后在代理配置文件中设置以下属性:
    • 指定 LDAP 服务器进行 SSL 通信时所使用的端口。例如:
    • imq.user_repository.ldap.server=myhost:7878

    • 将代理属性 imq.user_repository.ldap.ssl.enabled
      设置为 true

这些是与 LDAP 相关的属性:

有关这些属性的完整参考信息,请参见安全性管理器属性

为管理员设置访问控制

要创建管理用户,请使用访问控制属性文件指定能够创建 ADMIN 连接的用户和组。必须在 LDAP 目录中预定义这些用户和组。

能够创建 ADMIN 连接的任何用户或组都可以执行管理命令。


设置管理用户
  1. 通过将代理属性 imq.accesscontrol.enabled 设置为 true(这是默认值)来允许使用访问控制文件。
  2. imq.accesscontrol.enabled 属性允许使用访问控制文件。

  3. 打开访问控制文件 accesscontrol.properties。该文件的位置列于附录 A“Message Queue 数据在特定操作系统中的位置”
  4. 该文件包含一个如下所示的条目:

    service connection access control
    ##################################
    connection.NORMAL.allow.user=*
    connection.ADMIN.allow.group=admin

    列出的条目是示例。请注意,admin 组存在于基于文件的用户系统信息库中,而非默认存在于 LDAP 目录中。您必须将在 LDAP 目录中定义的组的名称替换为要为其授予 Message Queue 管理员权限的组的名称。

  5. 要为用户授予 Message Queue 管理员权限,请按如下所示输入用户名:
  6. connection.ADMIN.allow.user=userName[,userName2,..]

  7. 要为组授予 Message Queue 管理员权限,请按如下所示输入组名称:
  8. connection.ADMIN.allow.group=groupName[,groupName2,..]


授权用户:访问控制属性文件

访问控制属性文件(ACL 文件)包含一些规则,用来指定用户和用户组可以执行的操作。您可以编辑 ACL 文件,将操作限定到某些用户和组。各个代理实例可以使用不同的 ACL 文件。

当客户机应用程序执行以下操作之一时,代理将对其 ACL 文件进行检查:

代理将检查 ACL 文件以确定是授权生成请求的用户,还是用户所属的组来执行该操作。

如果对 ACL 文件进行编辑,新的设置在下一次代理检查该文件以验证授权时生效。编辑完文件后,不需要重新启动代理。

不管用户信息是放置在平面文件用户系统信息库中(请参见使用平面文件用户系统信息库)还是放置在 LDAP 用户系统信息库(请参见使用 LDAP 服务器管理用户系统信息库)中,均使用 ACL 文件。

创建访问控制属性文件

ACL 文件是特定于实例的。每次启动代理实例时,都会在该实例目录中创建一个名为 accesscontrol.properties 的默认文件。该文件的路径格式如下(请参见附录 A“Message Queue 数据在特定操作系统中的位置”):

…/instances/brokerInstanceName/etc/accesscontrol.properties

ACL 文件的格式与 Java 属性文件类似。首先定义文件的版本,然后指定访问控制规则,规则分为三部分:

version 属性定义 ACL 属性文件的版本,不能更改此条目。

version=JMQFileAccessControlModel/100

下面介绍指定访问控制的 ACL 文件的三个组成部分,然后说明访问规则的基本语法并介绍如何计算权限。

访问规则语法

在 ACL 属性文件中,访问控制用于定义特定用户或组对受保护的资源(如物理目标和连接服务)具有哪些访问权限。访问控制由一个规则或一组规则组成,每个规则都由一个 Java 属性表示:

这些规则的基本语法如下:

resourceType.resourceVariant.operation.access.principalType = principals

表 7-3 介绍了语法规则的元素。

表 7-3 访问规则的语法元素 

元素

说明

resourceType

下列选项之一:connectionqueuetopic

resourceVariant

resourceType 指定的类型的一个实例。例如,myQueue。通配符 (*) 可用于表示所有连接服务类型或所有物理目标。

operation

其值取决于所设置访问规则的类型。

access

下列选项之一:allowdeny

principalType

下列选项之一:usergroup。有关详细信息,请参见

principals

可能具有规则左侧指定了访问权限的人。如果 principalTypeuser,则可能是单个用户或以逗号分隔的用户列表;如果 principalTypegroup,则可能是单个组或以逗号分隔的组列表。通配符 (*) 可用于表示所有用户或所有组。

下面是一些访问规则实例:

权限的计算方式

当文件中存在多个访问规则时,将按如下方式计算权限:

用于连接服务的访问控制

ACL 属性文件中的连接访问控制部分包含代理连接服务的访问控制规则。连接访问控制规则的语法如下:

connection.resourceVariant.access.principalType = principals

resourceVariant 定义了两个值:NORMALADMIN。这些预定义的值是您唯一能够授予访问权限的连接服务类型。

默认的 ACL 属性文件授予所有用户访问 NORMAL 连接服务的权限,并授予 admin 组中的用户访问 ADMIN 连接服务的权限:

connection.NORMAL.allow.user=*

connection.ADMIN.allow.group=admin

如果使用的是基于文件的用户系统信息库,则由 imqusermgr 创建默认组 admin。如果使用的是 LDAP 用户系统信息库,则可通过执行以下操作之一来使用默认 ACL 属性文件:

您可以对连接访问权限加以限定。例如,以下规则将拒绝 Bob 访问 NORMAL,但允许其他人访问:

connection.NORMAL.deny.user=Bob

connection.NORMAL.allow.user=*

可以使用星号 (*) 指定所有授权用户或组。

使用 ACL 属性文件来授权访问 ADMIN 连接的方式与使用基于文件的用户系统信息库和 LDAP 用户系统信息库不同,如下所示:

对物理目标的访问控制

访问控制属性文件的目标访问控制部分包含基于物理目标的访问控制规则。这些规则决定谁(用户/组)可以在哪里(物理目标)执行什么(操作)。这些规则控制的访问类型包括向队列发送消息、向主题发布消息、从队列接收消息、订阅主题以及浏览队列中的消息。

默认情况下,任何用户或组都能够对任何物理目标进行任意类型的访问。您可以添加更多特定的目标访问规则或编辑默认的规则。本节下面介绍物理目标访问规则的语法,必须理解该语法才能编写自己的规则。

目标规则的语法如下:

resourceType.resourceVariant.operation.access.principalType = principals

表 7-4 列出了这些元素:

表 7-4 物理目标访问控制规则的元素 

组件

说明

resourceType

可以是 queuetopic

resourceVariant

某个物理目标名或所有物理目标 (*),星号表示所有队列或所有主题。

operation

可以是 produceconsumebrowse

access

可以是 allowdeny

principalType

可以是 usergroup

可以将访问权限授予一个或多个用户和/或一个或多个组。

以下示例说明了不同类型的物理目标访问控制规则:

对自动创建的物理目标的访问控制

ACL 属性文件的最后一部分访问规则指定代理将为哪些用户和组自动创建物理目标。

当用户在尚不存在的物理目标上创建生产方或使用方时,如果已启用代理的自动创建属性,则代理将会创建该目标。

默认情况下,任何用户或组都有权让代理为其自动创建一个物理目标。此特权由以下规则指定:

queue.create.allow.user=*

topic.create.allow.user=*

您可以编辑 ACL 文件以限制此类访问权限。

物理目标自动创建访问规则的一般语法如下:

resourceType.create.access.principalType = principals

其中 resourceTypequeuetopic

例如,以下规则将允许代理为除 Snoopy 之外的每个用户自动创建 topic 目标。

topic.create.allow.user=*

topic.create.deny.user=Snoopy

请注意,物理目标自动创建规则的效果必须与物理目标访问规则的效果一致。例如,如果您 1) 更改目标访问规则,禁止任何用户向目标发送消息;但是 2) 启用了目标的自动创建,那么如果目标不存在,代理创建一个物理目标,但不会向该目标发送任何消息。


使用基于 SSL 的服务

基于安全套接字层 (SSL) 标准的连接服务发送在客户机与代理之间发送的加密消息。本节将说明如何设置基于 SSL 的连接服务。

Message Queue 支持以下基于安全套接字层 (SSL) 标准的连接服务:

这些连接服务允许对在客户机和代理之间发送的消息进行加密。Message Queue 支持基于自签名服务器证书或签名证书的 SSL 加密。

为了使用基于 SSL 的连接服务,需要使用密钥工具实用程序 (imqkeytool) 生成专用密钥/公用密钥对。此实用程序将公用密钥嵌入自签名证书,此证书将传递给请求连接代理的客户机,客户机需要使用该证书建立加密连接。

尽管 Message Queue 基于 SSL 的连接服务在概念上很相似,但它们的设置方法却不尽相同。

本节后面部分将介绍如何通过 TCP/IP 建立安全连接。

基于 SSL 的连接服务(适用于通过 HTTP 连接的用户) (httpsjms),使客户机和代理可以通过 HTTPS 隧道 Servlet 方式建立安全连接。有关通过 HTTP 建立安全连接的信息,请参见附录 C“HTTP/HTTPS 支持”

TCP/IP 的安全连接服务

以下基于 SSL 的连接服务通过 TCP/IP 提供直接、安全的连接:

配置自签名证书的使用

本节介绍如何使用自签名证书来设置基于 SSL 的服务。

如果需要更严密的验证,您可以使用由证书颁发机构检验的签名证书。先按照本节中的步骤进行操作,然后转至配置签名证书的使用执行其他步骤。


设置基于 SSL 的连接服务
  1. 生成自签名证书。
  2. 在代理中启用 ssljmsssladmincluster 连接服务。
  3. 启动代理。
  4. 配置并运行客户机(仅适用于 ssljms 连接服务)。

设置 ssljmsssladmin 连接服务的过程基本相同,不同之处在于步骤 4,配置并运行客户机。

下文详细介绍了每个步骤。

步骤 1:生成自签名证书

Message Queue 带有自签名证书的 SSL 支持用于保护所传输数据的安全,假定客户机正在与已知且可信任的服务器进行通信。

运行 imqkeytool 命令,为代理生成自签名证书。在 UNIX® 系统上,可能需要以超级用户 (root)身份运行 imqkeytool 命令,以获得创建密钥库所需的权限。

可以对 ssljmsssladmincluster 连接服务使用相同的证书。

在命令提示符下输入以下内容:

imqkeytool -broker

实用程序会提示您输入密钥库密码。

Generating keystore for the broker ...
Enter keystore password:

然后,实用程序将提示信息,要求标识拥有该证书的代理。您提供的信息将构成 X.500 标识名。下表列出了一些提示,对其进行描述,并为每个提示提供了一个示例。值区分大小写,并且可以包含空格。

表 7-5 自签名证书所需的标识名信息

提示

说明

示例

您的姓名是什么?

X.500 commonName (CN)。输入正在运行代理的服务器的全限定名称。

myhost.sun.com

您所在部门的名称是什么?

X.500 organizationalUnit (OU)。输入部门或分部的名称。

purchasing

您的工作单位的名称是什么?

X.500 organizationName (ON)。大型工作单位的名称,如公司或政府机构。

My Company, Inc.

您所在城市或地区的名称是什么?

X.500 localityName (L)。

San Francisco

您所在国家或省市的名称是什么?

X.500 stateName (ST)。输入国家或省市的全称,不要使用缩写。

California

此单位的两字母国家/地区代码是什么?

X.500 country (C)。

US

当您输入信息后,imqkeytool 将显示该信息以进行确认。例如:

Is CN=mqserver.sun.com, OU=purchasing, O=My Company, Inc., L=San Francisco, ST=California, C=US correct?

要重新输入值,请接受默认值或输入 no;要接受当前值并继续,请输入 yes。确认后,imqkeytool 将生成关键字对而暂停其他操作。

接下来,imqkeytool 要求您输入密码以锁定特定关键字对(关键字密码)。按回车键响应此提示,以使用与关键字密码和密钥库密码相同的密码。


请记住您提供的密码。在启动代理时,您必须提供此密码以使代理打开密钥库。可以将密钥库密码存储在密码文件中(请参见使用密码文件)。


运行 imqkeytool 命令以运行 JDK keytool 实用程序,生成自签名证书并将其放置 Message Queue 的密钥库中。密钥库所在的目录因操作系统而异,如附录 A“Message Queue 数据在特定操作系统中的位置”中所示。

密钥库格式与 JDK1.2 keytool 实用程序支持的格式相同。

这些是 Message Queue 密钥库的可配置属性。

您可能需要重新生成关键字对以解决某些问题,例如:


重新生成关键字对
  1. 删除代理的密钥库,它的位置如附录 A“Message Queue 数据在特定操作系统中的位置”中所示。
  2. 再次运行 imqkeytool,生成步骤 1:生成自签名证书中描述的关键字对。

步骤 2:在代理中启用基于 SSL 的服务

要在代理中启用基于 SSL 的服务,您需要将 ssljms(或 ssladmin)添加到 imq.service.activelist 属性中。


基于 SSL 的 cluster 连接服务是使用 imq.cluster.transport 属性启用的,而不是使用 imq.service.activelist 属性启用的。请参见代理间的安全连接



在代理中启用基于 SSL 的服务
  1. 打开代理的实例配置文件。
  2. 实例配置文件位于一个目录中,该目录用与此配置文件相关联的代理实例的名称 (instanceName) 标识(请参见附录 A“Message Queue 数据在特定操作系统中的位置”):

    …/instances/instanceName/props/config.properties

  3. imq.service.activelist 属性添加一个条目(如果此条目尚不存在),并将基于 SSL 的服务包括在列表中。
  4. 默认情况下,此属性包括 jms 和 admin 连接服务。您需要添加 ssljms 或 ssladmin 连接服务或两个服务都添加(取决于您要激活的服务):

    imq.service.activelist=jms,admin,ssljms,ssladmin

步骤 3:启动代理

启动代理并提供密钥库密码。可以通过以下方法之一提供密码:

启用带有 SSL 的代理或客户机时,您可能会注意到它在几秒钟内使用了大量的 CPU 资源。这是因为 Message Queue 使用 JSSE(Java 安全套接扩展)来实现 SSL。JSSE 使用 java.security.SecureRandom() 生成随机数。此方法需要大量时间生成初始随机数初始化向量,这就是您看到 CPU 使用增加的原因。生成初始化向量后,CPU 的使用将降到正常水平。

步骤 4:配置并运行基于 SSL 的客户机

最后,配置客户机以使用安全连接服务。有两种通过 TCP/IP 的安全连接方案:

下面分别介绍这两种客户机。

使用 ssljms 的应用程序客户机

您必须确保客户机的类路径中有所需的安全套接扩展 (JSSE) Jar 文件,还需要告知该文件使用 ssljms 连接服务。

  1. 如果您的客户机不是使用 J2SDK1.4(它具有内置的 JSSE 和 JNDI 支持),请确保客户机的类路径中有以下 Jar 文件:
  2. jsse.jar、jnet.jar、jcert.jar 和 jndi.jar

  3. 请确保客户机的类路径中有以下 Message Queue Jar 文件:
  4. imq.jar 和 jms.jar

  5. 启动客户机并连接到代理的 ssljms 服务。执行上述操作的方法之一是输入如下命令:
  6. java -DimqConnectionType=TLS clientAppName

    设置 imqConnectionType,通知连接使用 SSL。

    有关在客户机应用程序中使用 ssljms 连接服务的详细信息,请参见 Message Queue Developer's Guide for Java Clients 中有关使用受管理对象的章节。

使用 ssladmin 的管理客户机 (imqcmd)

您可以通过在使用 imqcmd 时包含 -secure 选项来建立一个安全的管理连接。例如:

imqcmd list svc -b hostName:port -u adminName -secure

其中,adminName 是 Message Queue 用户系统信息库中的有效条目,该命令将提示您输入密码。(如果使用的是平面文件系统信息库,请参见更改默认的管理员密码)。

列出连接服务是查看 ssladmin 服务是否正在运行的一种方法,您可以成功建立安全管理连接,如以下输出所示:

列出指定的代理上的所有服务:

 

主机               主端口

localhost          7676

 

服务名称          端口号           服务状态

admin            33984 (动态)     运行中

httpjms          -                 未知

httpsjms         -                 未知

jms              33983  (动态)     运行中

ssladmin         35988 (动态)      运行中

ssljms           动态              未知

成功列出服务。

配置签名证书的使用

签名证书可以提供比自签名证书更严密的服务器验证。要实现签名证书,请将其安装到密钥库中,然后对 Message Queue 客户机进行配置,以使其在建立与 imqbrokerd 的 SSL 连接时请求签名证书。

您只能在客户机与代理之间实现签名证书,而不能在群集中的多个代理之间实现。

后面的说明假定您已经执行了配置自签名证书的使用中所述的步骤。在按照这些说明进行操作时,访问 http://java.sun.com 中有关 J2SE keytool 和 X.509 证书的信息可能会有所帮助。

步骤 1:获取和安装签名证书


获取签名证书
  1. 使用 J2SE keytool 为刚刚生成的自签名证书生成一个证书签名请求 (CSR)。
  2. 以下是一个示例:

    keytool -certreq -keyalg RSA -alias imq -file certreq.csr
            -keystore /etc/imq/keystore -storepass myStorePassword

    CSR 现在将证书封装到文件 certreq.csr 中。

  3. 通过以下方法之一生成或请求签名证书:
    • 由众所周知的证书颁发机构 (CA) 签署证书,如 Thawte 或 Verisign。有关此过程的详细信息,请参见 CA 文档。
    • 使用 SSL 签名软件包亲自对证书进行签名。
    • 最终的签名证书是一个 ASCII 字符序列。如果从 CA 收到签名证书,它可能是电子邮件附件或消息文本。

  4. 在收到签名证书后,请将其保存到文件中。
  5. 以下说明使用示例名 broker.cer 来表示代理证书。


安装签名证书
  1. 检查 $JAVA_HOME/lib/security/cacerts 以查明 J2SE 是否默认支持您的 CA,如下所示:
  2. keytool -v -list -keystore $JAVA_HOME/lib/security/cacerts

    此命令列出系统密钥库中的根 CA。

    如果您的 CA 已列出,请跳过下一步。

  3. 如果 J2SE 中不支持您的 CA,请将证书颁发机构的根证书导入到 imqbrokerd 密钥库中。
  4. 以下是一个示例:

    keytool -import -alias ca -file ca.cer -noprompt -trustcacerts
            -keystore /etc/imq/keystore -storepass myStorePassword

    ca.cer 值是从 CA 获取的 CA 根证书。

    如果您使用的是 CA 测试证书,则可能需要导入测试 CA 根证书。您的 CA 应提供有关如何获取测试 CA 根副本的说明。

  5. 将签名证书导入到密钥库中以替换原来的自签名证书。
  6. 例如:

    keytool -import -alias imq -file broker.cer -noprompt -trustcacerts
            -keystore /etc/imq/keystore -storepass myStorePassword

    broker.cer 值是包含从 CA 收到的签名证书的文件。

imqbrokerd 密钥库现在包含一个用于 SSL 连接的签名证书。

步骤 2:配置客户机运行时以请求签名证书


配置 Java 客户机运行时

默认情况下,Message Queue 客户机运行时信任 imqbrokerd 并接受提供给它的任何证书。现在,您必须将客户机运行时配置为请求签名证书,并确保客户机信任对该证书进行签名的 CA。

  1. 要对客户机进行配置以使其从 imqbrokerd 请求有效的签名证书,请将客户机的 ConnectionFactory 对象的 imqSSLIsHostTrusted 属性设置为 false
  2. 尝试建立到 imqbrokrd 的 SSL 连接,如步骤 4:配置并运行基于 SSL 的客户机中所述。
  3. 如果代理的证书是由众所周知的 CA 签名的,则连接可能会成功,您可以跳过下一步。如果连接由于证书验证错误而失败,请执行下一步。

  4. 在客户机的信任库(truststore)中安装签名 CA 的根证书,如下面各节所述。

有三个选项可用于配置具有信任库的客户机:

下面几部分包含有关如何使用这些选项来安装 Verisign Test Root CA 的示例。根 CA 包含在名为 testrootca.cer 的文件中。这些示例假定 J2SE 安装在 /usr/j2se 中。

安装到默认的系统 cacerts 文件中

本示例将根 CA 安装到文件 $JAVA_HOME/usr/jre/lib/security/cacerts 中。

keytool -import -keystore /usr/j2se/jre/lib/security/cacerts
         -alias VerisignTestCA -file testrootca.cer -noprompt          -trustcacerts -storepass
myStorePassword

默认情况下,客户机搜索此密钥库,因此无需对客户机进行进一步的配置。

安装到 jssecacerts 中

本示例将根 CA 安装到文件 $JAVA_HOME/usr/jre/lib/security/jssecacerts 中。

keytool -import -keystore /usr/j2se/jre/lib/security/jssecacerts
         -alias VerisignTestCA -file testrootca.cer -noprompt
         -trustcacerts -storepass myStorePassword

默认情况下,客户机搜索此密钥库,因此无需对客户机进行进一步的配置。

安装到其他文件中

本示例将根 CA 安装到文件 /home/smith/.keystore 中。

keytool -import -keystore /home/smith/.keystore
         -alias VerisignTestCA -file testrootca.cer -noprompt          -trustcacerts -storepass myStorePassword

默认情况下,客户机不搜索此密钥库,因此您必须向客户机提供信任库的位置。为此,请在客户机运行后设置 Java 系统属性 javax.net.ssl.trustStore。例如:

javax.net.ssl.trustStore=/home/smith/.keystore


使用密码文件

多种类型的命令都需要密码。在表 7-6 中,第一列列出了需要密码的命令,第二列列出了需要密码的原因。

表 7-6 使用密码的命令

命令

用途

密码的用途

imqbrokerd

启动代理

访问插入的持久性数据存储库、SSL 证书密钥库或 LDAP 用户系统信息库

imqcmd

管理代理

验证被授权使用此命令的管理用户

imqdbmgr

管理插入的数据存储库

访问数据存储库

可以在密码文件 (passfile) 中指定这些密码,并使用 -passfile 选项指定该文件的名称。下面是 -passfile 选项的格式:

imqbrokerd -passfile myPassfile


在以前的版本中,您可以使用 -p、-password、-dbpassword 和 -ldappassword 选项在命令行指定密码。不赞成使用这些选项,在今后的版本中会将其删除。在这一版本中,命令行中的这些选项值将取代密码文件中相关联的值。


安全性问题

以交互方式指定密码以响应提示是最安全的密码指定方法,除非他人也可以看到您的监视器。您也可以通过命令行指定密码文件。但是,以非交互方式使用命令时,必须使用密码文件。

密码文件是未加密的,因此,您必须设置其权限以防止对其进行未授权的访问。设置权限以限制可以查看该文件的用户,但为启动代理的用户提供读取访问权限。

密码文件内容

密码文件是包含一组属性和值的纯文本文件。每个值都是由某一命令使用的密码。

表 7-7 列出了密码文件可能包含的密码:

表 7-7 密码文件中的密码

密码

受影响的命令

说明

imq.imqcmd.password

imqcmd

imqcmd 命令行指定管理员密码。每个命令都需要验证此密码。

imq.keystore.password

imqbrokerd

为基于 SSL 的服务指定键存储密码。

imq.persist.jdbc.password

imqbrokerd

imdbmgr

指定必要时用于打开数据库连接的密码。

imq.user_repository.ldap.password

imqbrokerd

指定与代理的标识名(用于绑定到已配置的 LDAP 用户系统信息库)相关联的密码。

样例密码文件是 Message Queue 产品的一部分。有关样例文件的位置信息,请参见附录 A“Message Queue 数据在特定操作系统中的位置”


创建审计日志

Message Queue 仅在企业版中支持审计日志。启用审计日志后,Message Queue 将为下列类型的事件生成记录:

要将审计记录记录到 Message Queue 代理日志文件中,请将 imq.audit.enabled 代理属性设置为 true。日志中的所有审计记录都包含关键字 AUDIT

有关 imq.audit.enabled 属性的参考信息,请参见安全性管理器属性



上一页      目录      索引      下一页     


文件号码 819-2219。   版权所有 2005 Sun Microsystems, Inc. 保留所有权利。