客户端应用程序必须使用正确配置的连接工厂受管理对象才能建立与代理的 HTTPS 连接。
但是,客户端还必须能够访问 Java 安全套接扩展 (Java Secure Socket Extension, JSSE) 提供的 SSL 库,并且还必须有一个根证书。SSL 库是随 JDK 1.4 一起提供的。如果您使用的是早期版本的 JDK,请参见配置 JSSE;否则,请参见导入根证书。
解决上述问题后,即可开始配置 HTTPS 连接。
将 JSSE .jar 文件复制到 JRE_HOME/lib/ext 目录。
jsse.jar, jnet.jar, jcert.jar |
静态添加 JSSE 安全服务提供者,方法是将
security.provider.n=com.sun.net.ssl.internal.ssl.Provider |
添加到 JRE_HOME/lib/security/java.security 文件(其中 n 是安全服务提供者软件包的下一个可用优先级编号)。
如果您使用的不是 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
对显示的如下问题回答 YES:Trust 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。
可以使用以下方法之一设置连接工厂属性:
在创建连接工厂受管理对象的 imqobjmgr 命令中使用 -o 选项(请参见添加连接工厂),或者在使用管理控制台 (imqadmin) 创建连接工厂受管理对象时设置属性。
在启动客户端的命令中使用 -D 选项(请参见 Message Queue Developer's Guide for Java Clients)。
以编程方式在客户端代码中创建连接工厂之后,使用 API 调用来设置其属性(请参见 Message Queue Developer's Guide for Java Clients)。
如果正在运行多个代理,您不必配置多个 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 代理访问 HTTPS 隧道 Servlet:
将 http.proxyHost 系统属性设置为代理服务器主机名。
将 http.proxyPort 系统属性设置为代理服务器端口号。
可以通过在启动客户端应用程序的命令中使用 -D 选项来设置这些属性。