Sun Java System Message Queue 3.7 UR1 管理指南

使用自签名证书

要使用通过 TCP/IP 建立的基于 SSL 的连接服务,需要使用密钥工具实用程序 (imqkeytool) 生成公钥/私钥对。此实用程序将公钥嵌入自签名证书,此证书将传递给请求连接到代理的任何客户端,客户端需要使用该证书建立加密连接。本节介绍如何使用这样的自签名证书来设置基于 SSL 的服务。

如果需要更严密的验证,您可以使用由证书颁发机构验证的签名证书。若要使用签名证书,则除了使用自签名证书需要的步骤外,还需要其他一些步骤:必须先执行本节中介绍的步骤,然后再执行使用签名证书中的其他步骤。

Message Queue 对带有自签名证书的 SSL 支持用于保护所传输数据的安全性,并假定客户端正在与已知且可信任的服务器进行通信。以下过程说明了设置基于 SSL 的连接服务以使用自签名证书所需的步骤。下面各节更详细地介绍了每个步骤。

Procedure使用自签名证书设置基于 SSL 的连接服务

  1. 生成自签名证书。

  2. 在代理中启用 ssljmsssladmincluster 连接服务。

  3. 启动代理。

  4. 配置并运行客户端。

    此步骤仅适用于 ssljms 连接服务,不适用于 ssladmin cluster

生成自签名证书

运行密钥工具实用程序 (imqkeytool) 为代理生成自签名证书。(在 UNIX® 系统上,您可能需要以超级用户 (root) 身份运行该实用程序,才能获取创建密钥库的权限。)可以对 ssljmsssladmincluster 连接服务使用相同的证书。

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

imqkeytool -broker

密钥工具实用程序会提示您输入密钥库密码:

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

然后,实用程序将提示您输入标识此证书所属的代理的信息。您提供的信息将构成 X.500 标识名。表 7–5 显示了一些提示和为每个提示提供的值。值区分大小写,并且可以包含空格。

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

提示 

X.500 属性 

描述 

示例 

您的姓名是什么?

commonName (CN)

运行代理的服务器的全限定名称 

mqserver.sun.com

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

organizationalUnit (OU)

部门或分部的名称 

purchasing

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

organizationName (ON)

大型工作单位的名称,如公司或政府机构 

My Company, Inc.

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

localityName (L)

城市或地区的名称 

San Francisco

您所在州或省的名称是什么?

stateName (ST)

州或省的全称,不要使用缩写 

California

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

country (C)

标准两字母国家/地区代码 

US

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

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

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

接下来,实用程序要求您输入密码以锁定密钥对(密钥密码)。按 Return 键响应此提示,以使用同一密码作为密钥密码和密钥库密码。


注 –

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


密钥工具实用程序生成一个自签名证书,并将其放入 Message Queue 的密钥库。密钥库所在的目录因操作系统而异,附录 A, Message QueueTM 数据在特定平台上的位置 中所示。

以下是适用于基于 SSL 连接服务的 Message Queue 密钥库的可配置属性:

有时候您可能需要重新生成密钥对才能解决某些问题:例如,如果您在启动代理时忘记了密钥库密码或基于 SSL 的服务初始化失败,并收到了异常:

java.security.UnrecoverableKeyException:Cannot recover key

(出现异常的原因可能是因为您提供的密钥密码与您生成自签名证书时的密钥库密码不同。)

Procedure重新生成密钥对

  1. 删除代理的密钥库。有关密钥库的位置,请参见附录 A, Message QueueTM 数据在特定平台上的位置

  2. 再次运行 imqkeytool 生成新密钥对,如上所述。

启用基于 SSL 的连接服务

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

Procedure在代理中启用基于 SSL 的服务

  1. 打开代理的实例配置文件。

    实例配置文件位于一个由代理实例名称 (instanceName) 标识的目录中,而该实例名称与此配置文件是相关联的(请参见附录 A, Message QueueTM 数据在特定平台上的位置):

       .../instances/instanceName/props/config.properties
    
  2. imq.service. activelist 属性添加一个条目(如果此条目尚不存在),并将需要的基于 SSL 的服务包括在列表中。

    默认情况下,此属性包括 jmsadmin 连接服务。添加基于 SSL 的服务或希望激活的服务(ssljms 和/或 ssladmin):

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

    注 –

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


  3. 保存并关闭实例配置文件。

启动代理

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


注 –

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


配置并运行基于 SSL 的客户端

配置客户端以使用基于 SSL 的连接服务的过程各有不同,具体情况取决于客户端是应用程序客户端(使用 ssljms 连接服务)还是 imqcmd 之类的 Message Queue 管理客户端(使用 ssladmin 连接服务。)

应用程序客户端

对于应用程序客户端,您必须确保客户端在其 CLASSPATH 变量中指定了 .jar 文件:

如果您使用的是 Java 2 Software Development Kit (J2SDK) 1.4 之前的版本,您还必须包括 Java 安全套接扩展 (Java Secure Socket Extension, JSSE) 和 Java 命名和目录接口 (Java Naming and Directory Interface, JNDI) .jar 文件:

(如果使用的是 J2SDK 1.4 或之后的版本,则不需要包括这些文件,因为这些版本有内置的 JSSE 和 JNDI 支持。)

正确指定了 CLASSPATH 文件之后,启动客户端并连接到代理的 ssljms 连接服务的方法之一是输入如下命令:

java -DimqConnectionType=TLS clientAppName

这将通知连接使用基于 SSL 的连接服务。

管理客户端

对于管理客户端,可以通过在调用 imqcmd 命令时包含 -secure 选项来建立一个安全的连接:例如,

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

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

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


Listing all the services on the broker specified by:

Host                 Primary Port
localhost            7676

Service Name     Port Number       Service State
admin            33984 (dynamic)   RUNNING
httpjms          -                 UNKNOWN
httpsjms         -                 UNKNOWN
jms              33983 (dynamic)   RUNNING
ssladmin         35988 (dynamic)   RUNNING
ssljms           dynamic           UNKNOWN

Successfully listed services.