Sun Java 徽标     上一页      目录      索引      下一页     

Sun 徽标
Sun Java System Message Queue 3 2005Q4 管理指南 

第 7 章
管理安全性

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

本章包含以下各节:


验证用户

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

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

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

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

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 用户管理器实用程序 (imqusermgr),您可以编辑或填充平面文件用户系统信息库。本节介绍了用户管理器实用程序。下文说明如何使用 imqusermgr 子命令完成特定任务。

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

使用用户管理器之前,请谨记以下事项:

子命令

imqusermgr 命令包含子命令 adddeletelistupdate

命令选项

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

表 7-2 imqusermgr 选项 

选项

描述

-a activeState

指定用户是否处于活动状态 (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 的默认密码更改为只有您自己知道的密码。以下命令将 mybroker 代理实例的默认管理员密码从 admin 更改为 grandpoobah

imqusermgr update mybroker -u admin -p grandpoobah

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

imqcmd list svc mybroker -u admin

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

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

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

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

编辑实例配置文件

要让代理使用目录服务器,请设置代理实例配置文件 config.properties 中某些属性的值。设置这些属性后,每当用户试图连接到代理实例或执行信息传送操作时,代理实例都会在 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 属性的参考信息)。

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

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

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

      使用多个 LDAP 目录服务器时,可使用 ldap:// 指定每个额外的目录服务器。例如:

      imq.user_repository.ldap.server=myHost:7878 ldap://otherHost:7878 ...

      用空格分隔每个额外的目录服务器。对于其他与 LDAP 相关的属性,列表中的所有目录服务器必须使用相同的值。

为管理员设置访问控制

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

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

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

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

    服务连接访问控制
    ##################################
    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]...]


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

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

无论用户信息是放在平面文件用户系统信息库中还是放在 LDAP 用户系统信息库中,都会使用 ACL 文件。当客户端应用程序执行以下操作之一时,代理将检查其 ACL 文件:

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

如果对 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

如果您使用的是基于文件的用户系统信息库,则默认组由用户管理器实用程序创建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 的服务

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

Message Queue 支持以下基于安全套接字层 (Secure Socket Layer, 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 支持用于保护所传输数据的安全性,并假定客户端正在与已知且可信任的服务器进行通信。

运行密钥工具实用程序为代理生成自签名证书。在 UNIX® 系统上,可能需要以超级用户 (root) 身份运行密钥工具,以便具有创建密钥存储的权限。

可以对 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

输入信息后,密钥工具将显示这些信息以便于您确认。例如:

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

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

接下来,密钥工具要求您输入密码以锁定特定密钥对(密钥密码)。按 Return 键响应此提示,以使用同一密码作为密钥密码和密钥存储密码。


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


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 Secure Socket Extension,Java 安全套接扩展)来实现 SSL。JSSE 使用 java.security.SecureRandom 生成随机数。此方法需要大量时间生成初始随机数初始化向量,这就是您看到 CPU 使用率增加的原因。生成初始化向量后,CPU 的使用率将降到正常水平。

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

最后,配置客户端以使用安全连接服务。有两类在 TCP/IP 之上实现的安全连接方案:

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

使用 ssljms 的应用程序客户端

必须确保客户端的类路径中有必要的安全套接扩展 (Secure Socket Extension, 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:portNumber -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 为刚刚生成的自签名证书生成一个证书签名请求 (Certificate Signing Request, CSR)。
  2. 下面是一个示例:

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

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

  3. 通过以下方法之一生成或请求签名证书:
    • 由众所周知的证书颁发机构 (Certificate Authority, 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. 在客户端的信任存储中安装签名 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

启动代理

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

imqcmd

管理代理

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

imqdbmgr

管理基于 JDBC 的数据存储

访问数据存储

可以在密码文件中指定这些密码,并使用 -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 仅在 Enterprise Edition 中支持审计日志记录。启用审计日志记录后,Message Queue 将为下列类型的事件生成记录:

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



上一页      目录      索引      下一页     


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