Sun Java System Message Queue 3.7 UR1 管理指南

附录 C HTTP/HTTPS 支持

Message QueueTM Enterprise Edition 支持 Java 客户端通过 HTTP 或安全 HTTP (Secure HTTP, HTTPS) 传输与代理通信,而不是通过直接的 TCP 连接与代理通信。 HTTP/HTTPS 支持不适用于 C 客户端。

本附录介绍了启用此支持所使用的体系结构,并说明了如何设置客户端,使之能够使用基于 HTTP 的连接进行 Message Queue 消息传送。 本附录包含以下各节:

HTTP/HTTPS 支持体系结构

Message Queue 消息传送可以运行于 HTTP/HTTPS 连接之上。 因为 HTTP/HTTPS 连接通常可以穿过防火墙,因此可以通过防火墙将客户端应用程序与代理隔开。

图 C–1 列出了提供 HTTP/HTTPS 支持所需的主要组件。

图 C–1 HTTP/HTTPS 支持体系结构

该图显示了 HTTP 代理和 HTTP 隧道 Servlet 如何使消息通过防火墙。
图采用文本进行说明。

图 C–1 可以看出,HTTP 和 HTTPS 支持的体系结构非常相似。 主要区别在于,对于 HTTPS(httpsjms 连接服务)而言,隧道 Servlet 与客户端应用程序和代理之间的连接都是安全的。

与代理之间的安全连接是通过支持 SSL 的隧道 Servlet (Message Queue 的 HTTPS 隧道 Servlet)提供的,该 Servlet 向请求连接的任何代理发送自签名证书。 代理使用该证书建立与 HTTPS 隧道 Servlet 的加密连接。建立此连接之后,客户端应用程序和 Web 服务器/应用服务器可以协商建立客户端应用程序与隧道 Servlet 之间的安全连接。

启用 HTTP 支持

以下各节介绍了启用 HTTP 支持所需的步骤。

Procedure启用 HTTP 支持

  1. 部署 HTTP 隧道 Servlet。可以在以下对象上部署 HTTP 隧道 Servlet:

    • Sun Java SystemTM Web Server

      • Sun Java System Application Server

  2. 配置代理的 httpjms 连接服务并启动代理。

  3. 配置 HTTP 连接。

步骤 1:部署 HTTP 隧道 Servlet

在 Sun Java System Web Server 或 Sun Java System Application Server 上,可以将 HTTP 隧道 Servlet 作为 Web 归档 (Web archive, WAR) 文件进行部署。

要将 HTTP 隧道 Servlet 作为 .war 文件进行部署,需要使用 Web 服务器/应用服务器提供的部署机制。 HTTP 隧道 Servlet .war 文件 (imqhttp.war ) 位于包含 .jar .war.rar 文件的目录中,具体目录因操作系统而异(请参见附录 A, Message QueueTM 数据在特定平台上的位置)。

.war 文件包含一个部署描述符,该描述符包含 Web 服务器/应用服务器装入和运行 Servlet 时所需的基本配置信息。 根据 Web 服务器/应用服务器的不同,您可能还需要指定该 Servlet URL 的上下文根部分。

作为 Web 归档文件部署

有关在 Sun Java System Web Server 上部署的信息,请参见在 Sun Java System Web Server 上部署 HTTP 隧道 Servlet

有关在 Sun Java System Application Server 上部署的信息,请参见在 Sun Java System Application Server 上部署 HTTP 隧道 Servlet

在 Sun Java System Web Server 上部署 HTTP 隧道 Servlet

下面的说明与 Sun Java System Web Server 上的部署有关。通过使用 Web 浏览器访问 Servlet URL,可以验证 HTTP 隧道 Servlet 的部署是否成功。 它应该显示状态信息。

Procedure将 HTTP 隧道 Servlet 作为 .war 文件部署

  1. 在基于浏览器的管理 GUI 中,选择“虚拟 Server 类”选项卡并选择“管理类”。

  2. 选择相应的虚拟服务器类名(例如, defaultClass)并单击“管理”按钮。

  3. 选择“管理虚拟服务器”。

  4. 选择相应的虚拟服务器名称并单击“管理”按钮。

  5. 选择“Web 应用程序”选项卡。

  6. 单击“部署 Web 应用程序”。

  7. 为“WAR 文件位置”和“WAR 文件路径”字段选择相应的值,以指向 imqhttp.war 文件,该文件所在的目录因操作系统而异(请参见附录 A, Message QueueTM 数据在特定平台上的位置)。

  8. 在“应用程序 URI”字段中输入路径。

    “应用程序 URI”字段值为隧道 Servlet URL 的 /contextRoot 部分:

    http://hostName :portNumber / contextRoot/tunnel

    例如,如果将 contextRoot 设置为 imq, 则“应用程序 URI”字段为:

    /imq

  9. 输入要在其中部署 Servlet 的安装目录路径(通常位于 Sun Java System Web Server 的安装根目录下)。

  10. 单击“确定”。

  11. 重新启动 Web 服务器实例。

    Servlet 现在即被部署到以下位置:


    http://hostName:portNumber/
    contextRoot/tunnel

    客户端现在可以使用此 URL 通过 HTTP 连接来连接到消息服务。

禁用服务器访问日志

您不必禁用服务器访问日志,但禁用服务器访问日志可以获取更佳性能。

Procedure禁用服务器访问日志

  1. 选择“状态”选项卡。

  2. 选择“日志参考页”。

    请使用日志客户端访问控制来禁用日志记录。

在 Sun Java System Application Server 上部署 HTTP 隧道 Servlet

本节说明了如何在 Sun Java System Application Server 上将 HTTP 隧道 Servlet 作为 .war 文件进行部署,然后对该隧道 Servlet 进行配置,使其接受来自 Message Queue 代理的连接。

需要执行两个步骤:

使用部署工具

Procedure在应用服务器环境中部署 HTTP 隧道 Servlet

  1. 在基于 Web 的管理 GUI 中,选择

    “应用服务器”>“实例”> "server1" >“应用程序”>“Web 应用程序”。

  2. 单击“部署”按钮。

  3. 在“文件路径:”文本字段中,输入 HTTP 隧道 Servlet.war 文件 (imqhttp.war) 的位置,然后单击“确定”。

    imqhttp.war 文件的位置因操作系统而异(请参见附录 A, Message QueueTM 数据在特定平台上的位置)。

  4. 设置“上下文根”文本字段的值,然后单击“确定”。

    “上下文根”字段的值是隧道 Servlet URL 的 /contextRoot 部分:

    http:// hostName :portNumber / contextRoot/tunnel

    例如,可以将“上下文根”字段设置为 /imq

    显示的确认屏幕确认隧道 Servlet 已成功部署,在默认情况下处于启用状态,并且在本例中该 Servlet 位于以下位置:


    /var/opt/SUNWappserver8/domains/domain1/server1/applications/
    j2ee-modules/imqhttp_1

    Servlet 现在即被部署到以下 URL:


    http://hostName:portNumber/
    contextRoot/tunnel

    客户端现在即可使用此 URL 通过 HTTP 连接来连接到消息服务。

修改 server.policy 文件

应用服务器实施了一组默认安全策略,除非经过修改,否则它们将阻止 HTTP 隧道 Servlet 接受来自 Message Queue 代理的连接。

每个应用服务器实例都有一个包含安全策略或规则的文件。例如,server1 实例的此文件在 Solaris 上的位置为:

/var/opt/SUNWappserver8/domains/domain1/server1/config/
server.policy

要配置隧道 Servlet 以接受来自 Message Queue 代理的连接,此文件中还必须包含另一个条目。

Procedure修改应用服务器的 server.policy 文件

  1. 打开 server.policy 文件。

  2. 添加以下条目:


    grant codeBase
    "file:/var/opt/SUNWappserver8/domains/domain1/server1/
                    applications/j2ee-modules/imqhttp_1/-”
    {
            permission java.net.SocketPermission "*",
                    “connect,accept,resolve";
    };

步骤 2:配置 httpjms 连接服务

默认情况下不为代理激活 HTTP 支持,因此您需要重新配置代理才能激活 httpjms 连接服务。重新配置后,可以按照启动代理中介绍的步骤启动代理。

Procedure激活 httpjms 连接服务

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

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

    /instances/ instanceName /props/config.properties

  2. httpjms 值添加到 imq.service.activelist 属性中:


    imq.service.activelist=jms,admin,httpjms

    启动时,代理将查找 Web 服务器/应用服务器以及在其主机上运行的 HTTP 隧道 Servlet。但是,要访问远程隧道 Servlet,可以重新配置 servletHost servletPort 连接服务属性。

    此外,还可以重新配置 pullPeriod 属性来改善性能。 步骤 2:配置 httpjms 连接服务详细介绍了 httpjms 连接服务配置属性。

    属性 

    描述 

    imq.httpjms.http.servletHost

    必要时可以更改此值,以指定运行 HTTP 隧道 Servlet 的主机的名称(主机名或 IP 地址)。 (可以是远程主机或本地主机上的特定主机名。)默认值:localhost

    imq.httpjms.http. servletPort

    更改此值可以指定代理用于访问 HTTP 隧道 Servlet 的端口号。 (如果在 Web 服务器上更改了默认端口号,则必须对此属性做相应的更改。) 默认值:7675

    imq.httpjms.http. pullPeriod

    指定客户端运行时环境向代理发出提取消息的 HTTP 请求的时间间隔(以秒为单位)。(请注意,此属性在代理上设置并传播到客户端运行时环境。)如果值为零或负数,客户端将始终使一个 HTTP 请求处于待处理状态,这样可以随时尽快地提取消息。 如果客户端数量过多,这样做会消耗大量的 Web/应用服务器资源,从而导致服务器停止响应。 在这种情况下,应该将 pullPeriod 属性设置为正的秒数值。 此属性设置客户端 HTTP 传输驱动程序在发出下一个提取请求之前等待的时间。 将该值设置为正数可以节省 Web/应用服务器资源,但却延长了客户端等待响应的时间。 默认值:-1

    imq.httpjms.http. connectionTimeout

    指定客户端运行时环境等待 HTTP 隧道 Servlet 响应的时间(以秒为单位),超过此时间后将抛出异常。 (请注意,此属性在代理上设置并传播到客户端运行时环境。)此属性还指定代理与 HTTP 隧道 Servlet 通信后等待连接断开的时间。 在这种情况下设置超时时间是必要的,因为代理和隧道 Servlet 无法知道访问 HTTP Servlet 的客户端是否已异常终止。 默认值:60

步骤 3:配置 HTTP 连接

客户端应用程序必须使用正确配置的连接工厂受管理对象来建立与代理的 HTTP 连接。 本节介绍了 HTTP 连接配置问题。

配置连接工厂

要启用 HTTP 支持,必须将连接工厂的 imqAddressList 属性设置为 HTTP 隧道 Servlet URL。 HTTP 隧道 Servlet URL 的一般语法如下:

http://hostName:portNumber

/contextRoot/tunnel

其中 hostName:portNumber 是作为 HTTP 隧道 Servlet 宿主的 Web 服务器/应用服务器的名称和端口,而 contextRoot 是在该 Web 服务器/应用服务器上部署隧道 Servlet 时设置的路径。

有关连接工厂属性,特别是有关 imqAddressList 属性的详细信息,请参见 Message Queue Developer's Guide for Java Clients

可以使用以下方法之一设置连接工厂属性:

使用一个 Servlet 访问多个代理

如果正在运行多个代理,您不必配置多个 Web 服务器/应用服务器和多个 Servlet 实例。 可以在并发运行的多个代理之间共享一个 Web 服务器/应用服务器和一个 HTTP 隧道 Servlet 实例。如果多个代理实例共享一个隧道 Servlet,则必须如下所示配置 imqAddressList 连接工厂属性:

http://hostName:portNumber

/contextRoot/tunnel?ServerName=
bkrHostName:instanceName

其中 bkrHostName 是代理实例主机名,instanceName 是您希望客户端访问的特定代理实例的名称。

要查看是否为 bkrHostName instanceName 输入了正确的字符串,可以通过从浏览器访问 Servlet URL 来生成 HTTP 隧道 Servlet 的状态报告。 状态报告将列出 Servlet 正在访问的所有代理:


HTTP tunnel servlet ready.
Servlet Start Time : Thu May 30 01:08:18 PDT 2005
Accepting TCP connections from brokers on port : 7675
Total available brokers = 2
Broker List :
   jpgserv:broker2
   cochin:broker1

使用 HTTP 代理

如果使用 HTTP 代理访问 HTTP 隧道 Servlet:

可以通过在启动客户端应用程序的命令中使用 -D 选项来设置这些属性。

启用 HTTPS 支持

以下各节说明了启用 HTTPS 支持的步骤。 这些步骤与启用 HTTP 支持中的步骤类似,只是增加了生成和访问 SSL 证书的步骤。

Procedure启用 HTTPS 支持

  1. 为 HTTPS 隧道 Servlet 生成自签名证书。

  2. 修改 HTTPS 隧道 Servlet .war 文件的部署描述符,以便:

    • 指向放置证书密钥库的位置

      • 指定证书密钥库密码

  3. 部署 HTTPS 隧道 Servlet。可以在以下服务器上部署 HTTPS 隧道 Servlet:

    • Sun Java System Web Server

      • Sun Java System Application Server

  4. 配置代理的 httpsjms 连接服务并启动代理。

  5. 配置 HTTPS 连接。

    以下各节详细介绍了其中每个步骤。

步骤 1:为 HTTPS 隧道 Servlet 生成自签名证书

Message Queue 的 SSL 支持用于保护所传输数据的安全性,它假定客户端与之通信的服务器已知且可信任。 因此,仅使用自签名的服务器证书来实现 SSL。在 httpsjms 连接服务体系结构中,HTTPS 隧道 Servlet 充当代理和应用程序客户端的服务器。

运行 keytool 实用程序,以便为隧道 Servlet 生成自签名证书。 在命令提示符下输入以下内容:

JRE_HOME/bin/keytool -servlet keyStoreLocation

命令行实用程序会提示您提供所需的信息。(在 Unix 系统上,您可能需要以超级用户 (root) 身份运行 keytool 才能获取创建密钥库的权限。)

首先,keytool 提示您输入密钥库密码,并提示您输入一些组织信息,然后提示您进行确认。 收到确认后,它将在生成密钥对时暂停。然后它要求您输入密码以锁定特定的密钥对(密钥密码),此时应按回车键来响应此提示:这样做会使密钥密码与密钥库密码相同。


注 –

请记住输入的密码:稍后您必须将此密码提供给隧道 Servlet,以便它可以打开密钥库。


JDK keytool 实用程序生成一个自签名证书,并将其放入 Message Queue 的密钥库文件中,该文件的位置在 keyStoreLocation 参数中指定。


注 –

HTTPS 隧道 Servlet 必须能够访问该密钥库。请确保将生成的密钥库(位于 keyStoreLocation )移动/复制到 HTTPS 隧道 Servlet 可以访问的位置(请参见步骤 3:部署 HTTPS 隧道 Servlet)。


步骤 2:修改 HTTPS 隧道 Servlet .war 文件的描述符文件

HTTPS 隧道 Servlet 的 .war 文件包含一个部署描述符,该描述符包含 Web 服务器/应用服务器装入和运行该 Servlet 时所需的基本配置信息。

imqhttps.war 文件的部署描述符无法知道该隧道 Servlet 所需的密钥库文件的放置位置。 因此在部署 imqhttps.war 文件之前,必须编辑隧道 Servlet 的部署描述符(一个 XML 文件),以指定密钥库的位置和密码。

Procedure修改 HTTPS 隧道 Servlet .war 文件

  1. .war 文件复制到临时目录。

    cp /usr/share/lib/imq/imqhttps.war /tmp (Solaris)

    cp /opt/sun/mq/share/lib/imqhttps.war /tmp (Linux)

    cp IMQ_HOME/lib/imqhttps.war /tmp (Windows)

  2. 使临时目录成为当前目录。

    $ cd /tmp

  3. 提取 .war 文件的内容。

    $ jar xvf imqhttps.war

  4. 列出 .war 文件的部署描述符。

    $ ls -l WEB-INF/web.xml

  5. 编辑 web.xml 文件,为 keystoreLocationkeystorePassword 参数(如有必要,还包括 servletPortservletHost 参数)提供正确的值。

  6. 重新装入.war 文件的内容。

    $ jar uvf imqhttps.war WEB-INF/web.xml

    现在即可使用修改后的 imqhttps.war 文件来部署 HTTPS 隧道 Servlet。 (如果您担心泄漏密钥库密码,可以使用文件系统权限限制对 imqhttps.war 文件的访问。)

步骤 3:部署 HTTPS 隧道 Servlet

在 Sun Java System Web Server 或 Sun Java System 上,可以将 HTTPS 隧道 Servlet 作为 Web 归档 (WAR) 文件进行部署。

将 HTTPS 隧道 Servlet 作为 .war 文件部署时,需要使用 Web 服务器/应用服务器提供的部署机制。 HTTPS 隧道 Servlet .war 文件 (imqhttps.war ) 所在的目录因操作系统而异(请参见附录 A, Message QueueTM 数据在特定平台上的位置)。

您应该确保激活 Web 服务器的加密功能,以使客户端与代理之间的端到端通信是安全的。

作为 Web 归档文件部署

有关在 Sun Java System Web Server 上部署的信息,请参见在 Sun Java System Web Server 上部署 HTTPS 隧道 Servlet

有关在 Sun Java System 上部署的信息,请参见在 Sun Java System Application Server 上部署 HTTPS 隧道 Servlet

在 Sun Java System Web Server 上部署 HTTPS 隧道 Servlet

本节说明了如何在 Sun Java System Web Server 上将 HTTPS 隧道 Servlet 作为 .war 文件部署。 通过使用 Web 浏览器访问 Servlet URL,可以验证 HTTPS 隧道 Servlet 的部署是否成功。 它应该显示状态信息。

在部署 HTTPS 隧道 Servlet 之前,请确保 JSSE .jar 文件包含在 Web 服务器的类路径中。 要达到此目的,最简单的方法是将 jsse.jarjnet.jar jcert.jar 文件复制到 WebServer_TOPDIR/bin/https/jre/lib/ext

Procedure将 HTTPS 隧道 Servlet 作为 .war 文件部署

  1. 在基于浏览器的管理 GUI 中,选择“虚拟服务器类”选项卡。 单击“管理类”。

  2. 选择相应的虚拟服务器类名(例如, defaultClass)并单击“管理”按钮。

  3. 选择“管理虚拟服务器”。

  4. 选择相应的虚拟服务器名称并单击“管理”按钮。

  5. 选择“Web 应用程序”选项卡。

  6. 单击“部署 Web 应用程序”。

  7. 为“WAR 文件位置”和“WAR 文件路径”字段选择相应的值,以指向修改后的 imqhttps.war 文件(请参见步骤 2:修改 HTTPS 隧道 Servlet .war 文件的描述符文件。)

  8. 在“应用程序 URI”字段中输入路径。

    “应用程序 URI”字段值为隧道 Servlet URL 的 /contextRoot 部分:

    https://hostName :portNumber / contextRoot/tunnel

    例如,如果将 contextRoot 设置为 imq,则“应用程序 URI”字段为:

    /imq

  9. 输入要在其中部署 Servlet 的安装目录路径(通常位于 Sun Java System Web Server 的安装根目录下)。

  10. 单击“确定”。

  11. 重新启动 Web 服务器实例。

    Servlet 现在即被部署到以下 URL:


    https://hostName:portNumber/imq/tunnel

    客户端现在即可使用此 URL 通过安全的 HTTPS 连接来连接到消息服务。

禁用服务器访问日志

您不必禁用服务器访问日志,但禁用服务器访问日志可以获取更佳性能。

Procedure禁用服务器访问日志

  1. 选择“状态”选项卡。

  2. 选择“日志参考页”。

    请使用日志客户端访问控制来禁用日志记录。

在 Sun Java System Application Server 上部署 HTTPS 隧道 Servlet

本节说明了如何在 Sun Java System Application Server 上将 HTTPS 隧道 Servlet 作为 .war 文件部署。

需要执行两个步骤:

使用部署工具

以下过程说明了如何在应用服务器环境中部署 HTTPS 隧道 Servlet。

Procedure在应用服务器环境中部署 HTTPS 隧道 Servlet。

  1. 在基于 Web 的管理 GUI 中,选择

    “应用服务器”>“实例”> "server1" >“应用程序”>“Web 应用程序”

  2. 单击“部署”按钮。

  3. 在“文件路径:”文本字段中,输入 HTTPS 隧道 Servlet .war 文件 (imqhttps.war) 的位置,然后单击“确定”。

    imqhttps.war 文件的位置因操作系统而异(请参见附录 A, Message QueueTM 数据在特定平台上的位置)。

  4. 设置“上下文根”文本字段的值,然后单击“确定”。

    “上下文根”字段的值是隧道 Servlet URL 的 /contextRoot 部分:

    https://hostName :portNumber / contextRoot/tunnel

    例如,可以将“上下文根”字段设置为:

    /imq

    下一个屏幕显示隧道 Servlet 已成功部署,在默认情况下处于启用状态,并且在本例中该 Servlet 位于以下位置:


    /var/opt/SUNWappserver8/domains/domain1/server1/applications/
    j2ee-modules/imqhttps_1

    Servlet 现在即被部署到以下 URL:


    https://hostName:portNumber/
    contextRoot/tunnel

    客户端现在即可使用此 URL 通过 HTTPS 连接来连接到消息服务。

修改 server.policy 文件

应用服务器实施了一组默认安全策略,除非经过修改,否则它们将阻止 HTTPS 隧道 Servlet 接受来自 Message Queue 代理的连接。

每个应用服务器实例都有一个包含安全策略或规则的文件。例如,server1 实例的此文件在 Solaris 上的位置为:

/var/opt/SUNWappserver8/domains/domain1/server1/config/
server.policy

要配置隧道 Servlet 以接受来自 Message Queue 代理的连接,此文件中还必须包含另一个条目。

Procedure修改应用服务器的 server.policy 文件

  1. 打开 server.policy 文件。

  2. 添加以下条目:


    grant codeBase
    "file:/var/opt/SUNWappserver8/domains/domain1/server1/
                    applications/j2ee-modules/imqhttps_1/-”
    {
            permission java.net.SocketPermission "*",
                    “connect,accept,resolve";
    };

步骤 4:配置 httpsjms 连接服务

默认情况下不为代理激活 HTTPS 支持,因此您需要重新配置代理才能激活 httpsjms 连接服务。 重新配置后,可以按照启动代理中介绍的步骤启动代理。

Procedure激活 httpsjms 连接服务

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

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

    /instances/ instanceName /props/config.properties

  2. httpsjms 值添加到 imq.service.activelist 属性中:


    imq.service.activelist=jms,admin,httpsjms

    启动时,代理将查找 Web 服务器以及在其主机上运行的 HTTPS 隧道 Servlet。但是,要访问远程隧道 Servlet,可以重新配置 servletHostservletPort 连接服务属性。

    此外,还可以重新配置 pullPeriod 属性来改善性能。 步骤 4:配置 httpsjms 连接服务详细介绍了 httpjms 连接服务配置属性。

    属性 

    描述 

    imq.httpsjms.https.servletHost

    必要时可以更改此值,以指定运行 HTTPS 隧道 Servlet 的主机的名称(主机名或 IP 地址)。(可以是远程主机或本地主机上的特定主机名。)默认值:localhost

    imq.httpsjms.https. servletPort

    更改此值可以指定代理用于访问 HTTPS 隧道 Servlet 的端口号。(如果在 Web 服务器上更改了默认端口号,则必须对此属性做相应的更改。)默认值:7674

    imq.httpsjms.https. pullPeriod

    指定每个客户端发出从代理提取消息的 HTTPS 请求的时间间隔(以秒为单位)。 (请注意,此属性在代理上设置并传播到客户端运行时环境。)如果值为零或负数,客户端将始终使一个 HTTPS 请求处于待处理状态,这样可以随时尽快地提取消息。 如果客户端数量过多,这样做会消耗大量的 Web 服务器资源,从而导致服务器停止响应。 在这种情况下,应该将 pullPeriod 属性设置为正的秒数值。 此属性设置客户端 HTTPS 传输驱动程序在发出下一个提取请求之前等待的时间。 将该值设置为正数可以节省 Web 服务器资源,但却延长了客户端等待响应的时间。 默认值:-1

    imq.httpsjms.https. connectionTimeout

    指定客户端运行时环境等待 HTTPS 隧道 Servlet 响应的时间(以秒为单位),超过此时间后将抛出异常。 (请注意,此属性在代理上设置并传播到客户端运行时环境。)此属性还指定代理与 HTTPS 隧道 Servlet 通信后等待连接断开的时间。在这种情况下设置超时时间是必要的,因为代理和隧道 Servlet 无法知道访问 HTTPS Servlet 的客户端是否已异常终止。 默认值:60

步骤 5:配置 HTTPS 连接

客户端应用程序必须使用正确配置的连接工厂受管理对象才能建立与代理的 HTTPS 连接。

但是,客户端还必须能够访问 Java 安全套接扩展 (Java Secure Socket Extension, JSSE) 提供的 SSL 库,并且还必须有一个根证书。SSL 库是随 JDK 1.4 一起提供的。如果您使用的是早期版本的 JDK,请参见配置 JSSE;否则,请参见导入根证书

解决上述问题后,即可开始配置 HTTPS 连接。

配置 JSSE

Procedure配置 JSSE

  1. 将 JSSE .jar 文件复制到 JRE_HOME/lib/ext 目录。


    jsse.jar, jnet.jar, jcert.jar
  2. 静态添加 JSSE 安全服务提供者,方法是将


    security.provider.n=com.sun.net.ssl.internal.ssl.Provider

    添加到 JRE_HOME/lib/security/java.security 文件(其中 n 是安全服务提供者软件包的下一个可用优先级编号)。

  3. 如果您使用的不是 JDK1.4,则需要在启动客户端应用程序的命令中使用 -D 选项来设置下面的 JSSE 属性:


    java.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol

导入根证书

如果签署 Web 服务器证书的 CA 的根证书默认情况下不在信任数据库中,或者您使用的是专用的 Web 服务器/应用程序证书,则必须将该证书添加到信任数据库中。 如果存在上述情况,请按照下面的说明执行操作;否则,请转到配置连接工厂

假定证书保存在 certFile 中,且 trustStoreFile 是您的密钥库,请运行以下命令:

JRE_HOME/bin/keytool -import -trustcacerts
 -alias aliasForCertificate -file certFile

-keystore trustStoreFile

对显示的如下问题回答 YESTrust this certificate?

此外,还需要在启动客户端应用程序的命令中使用 -D 选项来指定以下 JSSE 属性:

javax.net.ssl.trustStore=trustStoreFile
javax.net.ssl.trustStorePassword=trustStorePasswd

配置连接工厂

要启用 HTTPS 支持,必须将连接工厂的 imqAddressList 属性设置为 HTTPS 隧道 Servlet URL。 HTTPS 隧道 Servlet URL 的一般语法如下:

https://hostName:portNumber

/contextRoot/tunnel

其中 hostName:portNumber 是作为 HTTPS 隧道 Servlet 宿主的 Web 服务器的名称和端口,而 contextRoot 是在该 Web 服务器上部署隧道 Servlet 时设置的路径。

有关连接工厂属性,特别是有关 imqAddressList 属性的详细信息,请参见 Message Queue Developer's Guide for Java Clients

可以使用以下方法之一设置连接工厂属性:

使用一个 Servlet 访问多个代理

如果正在运行多个代理,您不必配置多个 Web 服务器和多个 Servlet 实例。 可以在并发运行的多个代理之间共享一个 Web 服务器和一个 HTTPS 隧道 Servlet 实例。如果多个代理实例共享一个隧道 Servlet,则必须如下所示配置 imqAddressList 连接工厂属性:

https://hostName:portNumber

/contextRoot/tunnel?ServerName=
bkrHostName:instanceName

其中 bkrHostName 是代理实例主机名,instanceName 是您希望客户端访问的特定代理实例的名称。

要查看是否为 bkrhostName instanceName 输入了正确的字符串,可以通过从浏览器访问 Servlet URL 来生成 HTTPS 隧道 Servlet 的状态报告。 状态报告将列出 Servlet 正在访问的所有代理:


HTTPS tunnel servlet ready.
Servlet Start Time : Thu May 30 01:08:18 PDT 2002
Accepting secured connections from brokers on port : 7674
Total available brokers = 2
Broker List :
   jpgserv:broker2
   cochin:broker1

使用 HTTP 代理

如果使用 HTTP 代理访问 HTTPS 隧道 Servlet:

可以通过在启动客户端应用程序的命令中使用 -D 选项来设置这些属性。

疑难解答

本节介绍了 HTTP 或 HTTPS 连接可能出现的问题,并提供了有关如何解决这些问题的指导。

服务器或代理故障

如果 Web 服务器出现故障并重新启动,则所有连接都将恢复且不会对客户端产生影响。 但是,如果代理出现故障并重新启动,则会抛出异常,客户端必须重新建立连接。

如果 Web 服务器和代理均出现故障,并且代理没有重新启动,则 Web 服务器将恢复客户端连接并等待代理恢复连接,而不会通知客户端。 为了避免出现这种情况,应始终确保重新启动代理。

客户端无法通过隧道 Servlet 进行连接

如果 HTTPS 客户端无法通过隧道 Servlet 连接到代理,请执行以下操作:

Procedure如果客户端无法连接

  1. 启动 Servlet 和代理。

  2. 使用浏览器通过 HTTPS 隧道 Servlet URL 手动访问 Servlet。

  3. 使用以下管理命令暂停和恢复连接:


    imqcmd pause svc -n httpsjms -u admin
    imqcmd resume svc -n httpsjms -u admin

    服务恢复后,HTTPS 客户端应该能够通过隧道 Servlet 连接到代理。