Sun Java 標誌     上一章      目錄      索引      下一章     

Sun 標誌
Sun Java System Message Queue 3.5 SP1 管理指南 

附錄C
HTTP/HTTPS 支援 (企業版)

Message Queue 企業版 (請參閱「產品版本」) 包括 HTTP 與 HTTPS 連接的支援。(HTTPS 為安全套接層 - SLL - 上 HTTP 的傳輸連接。)此支援可讓用戶端應用程式使用 HTTP 協定 (並非直接的 TCP 連接) 與代理程式通訊。本附錄描述用於啟用此支援的架構,並介紹允許用戶端使用基於 HTTP 的連接進行 Message Queue 訊息傳送所需的設定工作。


備註

HTTP/HTTPS 支援可用於 Java 用戶端,但不適用於 C 用戶端。



HTTP/HTTPS 支援架構

Message Queue 訊息傳送可在 HTTP/HTTPS 連接的頂層執行。由於通常可允許 HTTP/HTTPS 連接通過防火牆,因此可允許透過防火牆將用戶端應用程式與代理程式分隔。

圖 C-1 顯示提供 HTTP/HTTPS 支援所需的主要元件。

圖 C-1 中所示,HTTP 和 HTTPS 支援的架構非常相似。主要區別在於,對於 HTTPS (httpsjms 連接服務),通道 Servlet 具有與用戶端應用程式和代理程式的安全連接。

可透過已啟用 SSL 的通道 Servlet (Message Queue 的 HTTPS 通道 Servlet) 提供與代理程式的安全連接。此通道 Servlet 將自身簽名的憑證傳送至請求連接的任何代理程式。代理程式使用此憑證來設定與 HTTPS 通道 Servlet 的加密連接。一旦建立此連接,用戶端應用程式與通道 Servlet 之間的安全連接可由用戶端應用程式和 Web Server 協商。


啟用 HTTP 支援

以下各節描述啟用 HTTP 支援所需採取的步驟。


啟用 HTTP 支援
  1. 在 Web Server 上部署 HTTP 通道 Servlet。
  2. 配置代理程式的 httpjms 連接服務並啟動代理程式。
  3. 配置 HTTP 連接。

步驟 1. 在 Web Server 上部署 HTTP 通道 Servlet

在 Web Server 上部署 HTTP 通道 Servlet 有兩種常用方法:

部署為 JAR 檔案

部署 Message Queue 通道 Servlet 由三個部分組成:使主機 Web Server 存取適當的 JAR 檔案,配置此 Web Server 以在啟動時載入 Servlet,以及指定 Servlet URL 的環境根式部分。

通道 Servlet JAR 檔案 (imqservlet.jar) 包含 HTTP 通道 Servlet 需要的所有類別,您可以在某個目錄 (目錄位置因作業系統而異) 中找到這個檔案 (請參閱附錄 A「Message Queue 資料的位置」)。

支援 Servlet 2.x 的任何 Web Server 均可用於載入此 Servlet。Servlet 類別名稱為:

com.sun.messaging.jmq.transport.
httptunnel.servlet.HttpTunnelServlet

Web Server 必須可查看 imqservlet.jar 檔案。如果您想在不同的主機上執行 Web Server 和代理程式,則應將 imqservlet.jar 檔案的副本放在 Web Server 可存取的位置。

您也必須配置 Web Server,以便在啟動時載入此 Servlet。另外,您可能必須指定 Serlet URL 的環境根式部分 (請參閱「範例 1︰在 Sun Java System Web Server 上部署 HTTP 通道 Servlet」)。

為了提昇效能,我們還建議您停用 Web Server 的存取記錄功能。

部署為 Web 歸檔檔案

將 HTTP 通道 Servlet 部署為 WAR 檔案,需要使用 Web Server 提供的部署機制。HTTP 通道 Servlet WAR 檔案 (imqhttp.war) 位於包含 .JAR、.WAR 與 .RAR 檔案的目錄中,目錄位置因作業系統而異 (請參閱附錄 A「Message Queue 資料的位置」)。

WAR 檔案包括部署描述元,此描述元包含 Web Server 載入和執行 Servlet 所需的基本配置資訊。因 Web Server 的不同,您也可能必須指定 Servlet URL 的環境根式部分 (請參閱「範例 2︰在 Sun Java System Application Server 7.0 上部署 HTTP 通道 Servlet」)。

步驟 2. 配置 httpjms 連接服務

預設情況下,代理程式不會啟動 HTTP 支援,所以您必須重新配置代理程式,以啟動 httpjms 連接服務。一旦重新配置,此代理程式便可啟動,如「啟動代理程式」中所述。


啟動 httpjms 連接服務
  1. 開啟代理程式的實例配置檔案。
  2. 實例配置檔案儲存於以代理程式實例名稱 (instanceName) 作為辨別依據的目錄中,且代理程式實例與配置檔案相互關聯 (請參閱 附錄 A「Message Queue 資料的位置」):

    .../instances/instanceName/props/config.properties

  3. httpjms 值新增至 imq.service.activelist 特性:
  4. imq.service.activelist=jms,admin,httpjms

啟動時,代理程式會查找在其主機上執行的 Web Server 和 HTTP 通道 Servlet。但是,若要存取遠端通道 Servlet,您可以重新配置 servletHost 和 servletPort 連接服務特性。

您還可以重新配置 pullPeriod 特性,以提昇效能。表 C-1 中詳細介紹了 httpjms 連接服務配置特性。

表 C-1 httpjms 連接服務特性 

特性名稱

說明

imq.httpjms.http.
servletHost

如有必要,請變更此值,以指定 HTTP 通道 Servlet 正在其上執行的主機 (主機名稱或 IP 位址) 的名稱。(這可以為遠端主機,或本地主機上的特定主機名稱。) 預設值:localhost

imq.httpjms.http.
servletPort

變更此值,以指定代理程式用於存取 HTTP 通道 Servlet 的連接埠號。(如果 Web Server 上的預設連接埠已變更,則您必須相應地變更此特性。) 預設值: 7675

imq.httpjms.http.
pullPeriod

指定用戶端發出從代理程式移除訊息的 HTTP 請求的間隔時間 (以秒為單位)。(請注意,此特性於代理程式上進行設定,且傳遞至用戶端執行階段。)如果值為零或負數,則用戶端將始終擱置一個 HTTP 請求,以準備儘快移除訊息。若用戶端數目過大,可能會導致 Web Server 資源大量外流,且伺服器可能沒有確認。在此類情況下,您應將 pullPeriod 特性設定為正的秒數。此作業將設定用戶端的 HTTP 傳輸驅動程式在發出後續移除請求之前等待的時間。將此值設定為正數可保存 Web Server 資源,但會影響用戶端所監視的確認次數。預設值: -1

imq.httpjms.http.
connectionTimeout

指定用戶端執行階段在系統拋出異常前,等待從 HTTP 通道 Servlet 發出確認的時間 (以秒為單位)。(請注意,此特性於代理程式上進行設定,且傳遞至用戶端執行階段。)此特性也會指定中斷連接前,代理程式與 HTTP 通道 Servlet 進行通訊後,代理程式等待的時間。因為代理程式與通道 Servlet 無法得知存取 HTTP Servlet 的用戶端是否已異常中斷,在此情況下,必須設定逾時時間。預設值: 60

步驟 3. 配置 HTTP 連接

用戶端應用程式必須使用已適當配置的連線工廠受管理物件,以建立與代理程式的 HTTP 連接。本節說明 HTTP 連接配置問題。

配置連線工廠

若要啟用 HTTP 支援,您必須將連線工廠的 imqAddressList 屬性設定至 HTTP 通道 Serlet URL。HTTP 通道 Servlet URL 的一般語法如下:

http://hostName:port/contextRoot/tunnel

hostName:port 為代管 HTTP 通道 Servlet 之 Web Server 的名稱和連接埠;contextRoot 為在 Web Server 上部署通道 Servlet 的路徑設定。

如需連線工廠屬性的一般資訊與 imqAddressList 屬性的特定資訊,請參閱「Message Queue Java 用戶端開發人員指南」。

您可以透過以下方法之一設定連線工廠屬性:

使用單一 Servlet 存取多重代理程式

如果您要執行多重代理程式,則無需配置多重 Web Server 和 Servlet 實例。您可以在同時執行的代理程式中共用單一 Web Server 和 HTTP 通道 Servlet 實例。如果多重代理程式實例正共用一個通道 Servlet,您必須配置 imqAddressList 連線工廠屬性,配置內容如下:

http://hostName:port/contextRoot/tunnel?ServerName=bkrHostName:instanceName

bkrHostName 為代理程式實例主機名稱;instanceName 為您用戶端存取的特定代理程式實例名稱。

若要檢查您是否已為 bkrHostNameinstanceName 輸入正確的字串,則應透過從瀏覽器存取 Servlet URL 產生 HTTP 通道 Servlet 的狀態報告。此報告將列出 Servlet 要存取的所有代理程式:

HTTP tunnel servlet ready.

Servlet Start Time : Thu May 30 01:08:18 PDT 2002

Accepting TCP connections from brokers on port : 7675

Total available brokers = 2

Broker List :

   jpgserv:broker2

   cochin:broker1

使用 HTTP 代理

如果您要使用 HTTP 代理存取 HTTP 通道 Servlet:

您可以使用可啟動用戶端應用程式之指令的 -D 選項來設定這些特性。

範例 1︰在 Sun Java System Web Server 上部署 HTTP 通道 Servlet

本節描述如何在 Sun Java System Web Server 上將 HTTP 通道 Servlet 部署為 JAR 檔案和 WAR 檔案。您使用的方法取決於 Sun Java System Web Server 的版本:如果它不支援 Servlet 2.2 或較高版本,它將無法處理 WAR 檔案部署。

部署為 JAR 檔案

以下說明參考了使用基於瀏覽器的管理 GUI 之 Sun Java System Web Server 6.1 上的部署。此程序包含以下常用步驟:

  1. 新增 Servlet
  2. 配置 Servlet 虛擬路徑
  3. 載入 Servlet
  4. 停用 Servlet 存取記錄

這些步驟將在以下各小節中描述。您可以透過使用 Web 瀏覽器存取 Servlet URL 來驗證成功的 HTTP 通道 Servlet 部署。它應顯示狀態資訊。

新增 Servlet
    新增通道 Servlet
  1. 選取 [Servlets] 標籤。
  2. 選擇 [配置 Servlet 屬性]。
  3. 在 [Servlet 名稱] 欄位中,指定通道 Servlet 的名稱。
  4. 將 [Servlet 程式碼 (類別名稱)] 欄位設定為以下值:
  5. com.sun.messaging.jmq.transport.
    httptunnel.servlet.HttpTunnelServlet

  6. 在 [Servlet 類別路徑] 欄位中輸入 imqservlet.jar 的完整路徑。例如:
  7. 在 Solaris 上為 /usr/share/lib/imq/imqservlet.jar

    在 Linux 上為 /opt/imq/lib/imqservlet.jar

    在 Windows 上為 IMQ_HOME/lib/imqservlet.jar

  8. 在 [Servlet 引數] 欄位中,輸入任何選擇性引數,如表 C-2 中所示:
  9. 表 C-2 用於部署 HTTP 通道 Servlet JAR 檔案的 Servlet 引數

    引數

    預設值

    參考

    servletHost

    所有主機

    請參閱表 C-1

    servletPort

    7675

    請參閱表 C-1

    如果要使用這兩個引數,請使用逗號將它們分隔:

    servletPort=連接埠號, servletHost=...

    servletHostservletPort 引數僅適用於 Web Server 和代理程式之間的通訊,並且僅在預設值有問題時才設定。但是,在此情況下,您還必須相應地設定代理程式配置特性 (請參閱表 C-1),例如:

    imq.httpjms.http.servletPort

配置 Servlet 虛擬路徑 (Servlet URL)
    若要配置通道 Servlet 的虛擬路徑 (Servlet URL)
  1. 選取 [Servlets] 標籤。
  2. 選擇 [配置 Servlet 虛擬路徑轉換]。
  3. 設定 [虛擬路徑] 欄位。
  4. 「虛擬路徑」為通道 Servlet URL 的 /contextRoot/tunnel 的一部份:

    http://hostName:port/contextRoot/tunnel

    舉例來說,如果您將 contextRoot 設定至 imq,那麼 [虛擬路徑] 欄位則為:

    /imq/tunnel

  5. 將 [Servlet 名稱] 欄位設定為與「新增 Servlet」步驟 3中相同的值。
載入 Servlet
    在啟動 Web Server 時載入通道 Servlet
  1. 選取 [Servlets] 標籤。
  2. 選擇 [配置全域屬性]。
  3. 在 [啟動 Servlet] 欄位中,輸入與「新增 Servlet」步驟 3中相同的 Servlet 名稱值。
停用伺服器存取記錄

您不必停用伺服器存取記錄,但是如果您停用記錄,將會獲得更好的效能。

    停用伺服器存取記錄
  1. 選取 [狀態] 標籤。
  2. 選擇 [記錄個人喜好頁面]。
  3. 使用記錄用戶端存取控制來停用記錄

部署為 WAR 檔案

以下說明參考了 Sun Java System Web Server 6.0 Service Pack 2 上的部署。您可以透過使用 Web 瀏覽器存取 Servlet URL 來驗證成功的 HTTP 通道 Servlet 部署。它應顯示狀態資訊。


將 HTTP 通道 Servlet 部署為 WAR 檔案
  1. 在基於瀏覽器的管理 GUI 中,選取 [虛擬伺服器類別] 標籤並選取 [管理類別]。
  2. 選取適當的虛擬伺服器類別名稱 (例如 defaultClass),然後按一下 [管理] 按鈕。
  3. 選取 [管理虛擬伺服器]。
  4. 選取適當的虛擬伺服器名稱,然後按一下 [管理] 按鈕。
  5. 選取 [Web 應用程式] 標籤。
  6. 按一下 [部署 Web 應用程式]。
  7. 為 [WAR 檔案開啟] 和 [WAR 檔案路徑] 欄位選取適當的值,以便指向 imqhttp.war 檔案的位置。您可以在某個目錄 (目錄位置因作業系統而異) 中找到這個檔案 (請參閱 附錄 A「Message Queue 資料的位置」)。
  8. 在 [應用程式 URI] 欄位中輸入路徑。
  9. [應用程式 URI] 欄位值為通道 Servlet URL 的 /contextRoot 的一部份:

    http://hostName:port/contextRoot/tunnel

    舉例來說,如果您將 contextRoot 設定至 imq,那麼 [應用程式 URI] 欄位則為:

    /imq

  10. 輸入應部署 Servlet 的安裝目錄路徑 (通常位於 Sun Java System Web Server 安裝根目錄下)。
  11. 按一下 [確定]。
  12. 重新啟動 Web Server 實例。

此時,Servlet 可從以下位址獲得:

http://hostName:port/contextRoot/tunnel

此時,用戶端可使用此 URL,以使用 HTTP 連接來連接至訊息服務。

範例 2︰在 Sun Java System Application Server 7.0 上部署 HTTP 通道 Servlet

本節描述如何在 Sun Java System Application Server 7.0 上將 HTTP 通道 Servlet 部署為 WAR 檔案。

您需要執行兩個步驟:

使用部署工具


在 Application Server 7.0 環境中部署 HTTP 通道 Servlet
  1. 在基於瀏覽器的管理 GUI 中選取
  2. 應用程式伺服器 > 實例 > server1 > 應用程式 > Web 應用程式。

  3. 按一下 [部署] 按鈕。
  4. 在 [檔案路徑:] 文字欄位輸入 HTTP 通道 Servlet WAR 檔案 (imqhttp.war) 的位置。
  5. imqhttp.war 檔案的位置會因您的作業系統而有差異 (請參閱 附錄 A「Message Queue 資料的位置」)。

  6. 按一下 [確定]。
  7. 在下一個畫面,於 [環境根式] 文字欄位中設定數值。
  8. [環境根式] 欄位值為通道 Servlet URL 的 /contextRoot 的一部份:

    http://hostName:port/contextRoot/tunnel

    例如,您可以將 [環境根式] 欄位設定為:

    /imq

  9. 按一下 [確定]。
  10. 依預設,接著會出現下一個畫面,表示通道 Servlet 已成功部署在:

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

此時,Servlet 可從以下位址獲得:

http://hostName:port/contextRoot/tunnel

此時,用戶端可使用此 URL,以使用 HTTP 連接來連接至訊息服務。

修改 server.policy 檔案

Application Server 7.0 會強制一組預設安全策略,除非修改的檔案可以阻止 HTTP 通道 Servlet 接受來自 Message Queue 代理程式的連接。

每個應用程式伺服器實例,皆有一個包含安全策略或規則的檔案。例如,Solaris 上用於 server1 實例的檔案位置為:

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

若要讓通道 Servlet 接受來自 Message Queue 代理程式的連接,則必須在此檔案新增其他項目。


若要修改 Application Server 的伺服器策略檔案
  1. 開啟伺服器策略檔案。
  2. 新增以下項目:
  3.  

    grant codeBase

    "file:/var/opt/SUNWappserver7/domains/domain1/server1/

    applications/j2ee-modules/imqhttp_1/-"

    {

    permission java.net.SocketPermission "*",
    "connect,accept,resolve";

    };

     


啟用 HTTPS 支援

以下各節描述啟用 HTTPS 支援所需採取的步驟。它們與「啟用 HTTP 支援」中的那些步驟,以及產生和存取 SSL 憑證所需的步驟相似。


啟用 HTTPS 支援
  1. 為 HTTPS 通道 Servlet 產生自身簽名的憑證。
  2. 在 Web Server 上部署 HTTPS 通道 Servlet。
  3. 配置代理程式的 httpsjms 連接服務並啟動代理程式。
  4. 配置 HTTPS 連接。

以下各節中將更加詳細地說明這些步驟中的每一步。

步驟 1. 為 HTTPS 通道 Servlet 產生自身簽名的憑證

在假設用戶端正與已知且可信任的伺服器通訊的情況下,Message Queue 的 SSL 支援可保護線上資料。因此,僅使用自身簽名的伺服器憑證即可實施 SSL。在 httpsjms 連接服務架構中,HTTPS 通道 Servlet 是代理程式與應用程式用戶端的伺服器。

執行 imqkeytool 公用程式,以便為通道 Servlet 產生自身簽名的憑證。在命令提示字元下輸入以下內容:

imqkeytool -servlet keystore_location

此公用程式將提示您提供它所需的資訊。(在 Unix 系統上,為了擁有建立密鑰儲存的許可權,您可能需要以超級使用者 (root) 的身份執行 imqkeytool。)

首先,imqkeytool 會提示您提供密鑰儲存密碼以及某些組織資訊,然後提示您確認。接收到確認之後,它會在產生鍵對時暫停。然後它會要求您提供密碼,以鎖定特定的鍵對 (鍵密碼);您應按 [Return] 以確認此提示:這會使鍵密碼與密鑰儲存密碼相同。


備註

請記住您所提供的密碼 -- 稍後您需要將此密碼提供給通道 Servlet,以便它可開啟密鑰儲存。


執行 imqkeytool 可執行 JDK keytool 公用程式,以產生自身簽名的憑證,並將其放在位於 keystore_location 引數所指定的 Message Queue 密鑰儲存檔案中。(此密鑰儲存的格式與 JDK1.2 keytool 支援的格式相同。)


備註

HTTPS 通道 Servlet 必須可查看此密鑰儲存。請確定您將位於 keystore_location 中已產生的密鑰儲存移動/複製到 HTTPS 通道 Servlet 可存取的位置 (請參閱「步驟 2. 在 Web Server 上部署 HTTPS 通道 Servlet」)。


步驟 2. 在 Web Server 上部署 HTTPS 通道 Servlet

在 Web Server 上部署 HTTPS 通道 Servlet 有兩種常用方法:

在這兩種情況下,您都應確保為 Web Server 啟動加密,從而讓用戶端與代理程式之間進行端對端安全通訊。

部署為 JAR 檔案

部署 Message Queue 通道 Servlet 由三個部分組成:使主機 Web Server 存取適當的 JAR 檔案,配置此 Web Server 以在啟動時載入 Servlet,以及指定 Servlet URL 的環境根式部分。

通道 Servlet JAR 檔案 (imqservlet.jar) 包含 HTTPS 通道 Servlet 需要的所有類別,您可以在某個目錄 (目錄位置因作業系統而異) 中找到這個檔案 (請參閱附錄 A「Message Queue 資料的位置」)。

支援 Servlet 2.x 的任何 Web Server 均可用於載入此 Servlet。Servlet 類別名稱為:

com.sun.messaging.jmq.transport.
httptunnel.servlet.HttpsTunnelServlet

Web Server 必須可查看 imqservlet.jar 檔案。如果您想在不同的主機上執行 Web Server 和代理程式,則應將 imqservlet.jar 檔案的副本放在 Web Server 可存取的位置。

您也必須配置 Web Server,以便在啟動時載入此 Servlet。另外,您可能必須指定 Serlet URL 的環境根式部分 (請參閱「範例 3︰在 Sun Java System Web Server 上部署 HTTPS 通道 Servlet」)。

確保 JSSE JAR 檔案在類別路徑中,以便在 Web Server 中執行 Servlet。檢查 Web Server 的說明文件,以便瞭解如何執行此作業。

配置 Web Server 的一個重要方面是指定自身簽名憑證的位置和密碼,以便 HTTPS 通道 Servlet 使用此憑證來建立與代理程式的安全連接。您必須將「步驟 1. 為 HTTPS 通道 Servlet 產生自身簽名的憑證」中建立的密鑰儲存放在 HTTPS 通道 Servlet 可存取的位置。

為了提昇效能,我們還建議您停用 Web Server 的存取記錄功能。

部署為 Web 歸檔檔案

將 HTTPS 通道 Servlet 部署為 WAR 檔案,需要使用 Web Server 提供的部署機制。HTTPS 通道 Servlet WAR 檔案 (imqhttps.war) 位於您作業系統的某個目錄中,目錄位置因作業系統而異 (請參閱 附錄 A「Message Queue 資料的位置」)。

WAR 檔案包括部署描述元,此描述元包含 Web Server 載入和執行 Servlet 所需的基本配置資訊。因 Web Server 的不同,您也可能必須指定 Servlet URL 的環境根式部分 (請參閱「範例 4︰在 Sun Java System Application Server 7.0 上部署 HTTPS 通道 Servlet」)。

但是,imqhttps.war 檔案的部署描述元無法知道您已將通道 Servlet 所需的密鑰儲存檔案放在何處 (請參閱「步驟 1. 為 HTTPS 通道 Servlet 產生自身簽名的憑證」)。這要求您編輯通道 Servlet 的部署描述元 (XML 檔案),以在部署 imqhttps.war 檔案之前指定密鑰儲存的位置。

步驟 3. 配置 httpsjms 連接服務

預設情況下,代理程式不會啟動 HTTPS 支援,所以您必須重新配置代理程式,以啟動 httpsjms 連接服務。一旦重新配置,此代理程式便可啟動,如「啟動代理程式」中所述。


啟動 httpsjms 連接服務
  1. 開啟代理程式的實例配置檔案。
  2. 實例配置檔案儲存於以代理程式實例名稱 (instanceName) 作為辨別依據的目錄中,且代理程式實例與配置檔案相互關聯 (請參閱 附錄 A「Message Queue 資料的位置」):

    .../instances/instanceName/props/config.properties

  3. httpsjms 值新增至 imq.service.activelist 特性:
  4. imq.service.activelist=jms,admin,httpsjms

啟動時,代理程式會查找在其主機上執行的 Web Server 和 HTTPS 通道 Servlet。但是,若要存取遠端通道 Servlet,您可以重新配置 servletHost 和 servletPort 連接服務特性。

您還可以重新配置 pullPeriod 特性,以提昇效能。表 C-3 中詳細介紹了 httpsjms 連接服務配置特性。

表 C-3 httpsjms 連接服務特性 

特性名稱

說明

imq.httpsjms.https.
servletHost

如有必要,請變更此值,以指定 HTTPS 通道 Servlet 正在其上執行的主機 (主機名稱或 IP 位址) 的名稱。(這可以為遠端主機,或本地主機上的特定主機名稱。) 預設值:localhost

imq.httpsjms.https.
servletPort

變更此值,以指定代理程式用於存取 HTTPS 通道 Servlet 的連接埠號。(如果 Web Server 上的預設連接埠已變更,則您必須相應地變更此特性。) 預設值: 7674

imq.httpsjms.https.
pullPeriod

指定每個用戶端發出從代理程式中移除訊息的 HTTP 請求的間隔時間 (以秒為單位)。(請注意,此特性於代理程式上進行設定,且傳遞至用戶端執行階段。)如果值為零或負數,則用戶端將始終擱置一個 HTTP 請求,以準備儘快移除訊息。若用戶端數目過大,可能會導致 Web Server 資源大量外流,且伺服器可能沒有確認。在此類情況下,您應將 pullPeriod 特性設定為正的秒數。此作業將設定用戶端的 HTTP 傳輸驅動程式在發出後續移除請求之前等待的時間。將此值設定為正數可保存 Web Server 資源,但會影響用戶端所監視的確認次數。預設值: -1

imq.httpsjms.https.
connectionTimeout

指定用戶端執行階段在系統拋出異常前,等待從 HTTPS 通道 Servlet 發出確認的時間 (以秒為單位)。(請注意,此特性於代理程式上進行設定,且傳遞至用戶端執行階段。)此特性也會指定中斷連接前,代理程式與 HTTPS 通道 Servlet 進行通訊後,代理程式等待的時間。因為代理程式與通道 Servlet 無法得知存取 HTTPS Servlet 的用戶端是否已異常中斷,在此情況下,必須設定逾時時間。預設值: 60

步驟 4. 配置 HTTPS 連接

用戶端應用程式必須使用已適當配置的連線工廠受管理物件,以建立與代理程式的 HTTPS 連接。

但是,用戶端還必須對 Java 安全套接延伸 (JSSE) 提供的 SSL 程式庫擁有存取權,並且還必須具有超級使用者憑證。SSL 程式庫隨附於 JDK 1.4。如果您有較低版本的 JDK,請參閱「配置 JSSE」,否則請繼續執行「匯入超級使用者憑證」

一旦解決這些問題,您可以繼續配置 HTTPS 連接。

配置 JSSE

    配置 JSSE
  1. 將 JSSE JAR 檔案複製到 JRE_HOME/lib/ext 目錄。
  2. jsse.jar、jnet.jar、jcert.jar

  3. 靜態新增 JSSE 安全性供應程式,方法為透過將
  4. security.provider.n=com.sun.net.ssl.internal.ssl.Provider

    新增至 JRE_HOME/lib/security/java.security 檔案 (其中 n 為安全性供應程式套裝軟體的下一個可用優先順序號)。

  5. 如果未使用 JDK1.4,則您需要使用可啟動用戶端應用程式之指令的 -D 選項,來設定以下 JSSE 特性:
  6. java.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol

匯入超級使用者憑證

如果 CA (為您的 Web Server 憑證簽名) 的超級使用者憑證依預設不在信任資料庫中,或者您使用的是專用 Web Server 憑證,則您必須將此憑證新增至信任資料庫。如果出現此情況,請遵循以下說明,否則請參考「配置連線工廠」中的說明。

假設此憑證儲存在 cert_file 中,且 trust_store_file 為您的密鑰儲存,請執行以下指令:

JRE_HOME/bin/keytool -import -trustcacerts
-alias alias_for_certificate -file cert_file
-keystore trust_store_file

對以下問題回答 YES:Trust this certificate? (是否信任此憑證?)

您還需要使用可啟動用戶端應用程式之指令的 -D 選項,來指定以下 JSSE 特性:

javax.net.ssl.trustStore=trust_store_file

javax.net.ssl.trustStorePassword=trust_store_passwd

配置連線工廠

若要啟用 HTTPS 支援,您必須將連線工廠的 imqAddressList 屬性設定至 HTTPS 通道 Serlet URL。HTTPS 通道 Servlet URL 的一般語法如下:

https://hostName:port/contextRoot/tunnel

hostName:port 為代管 HTTPS 通道 Servlet 之 Web Server 的名稱和連接埠;contextRoot 為在 Web Server 上部署通道 Servlet 的路徑設定。

如需連線工廠屬性的一般資訊與 imqAddressList 屬性的特定資訊,請參閱「Message Queue Java 用戶端開發人員指南」。

您可以透過以下方法之一設定連線工廠屬性:

使用單一 Servlet 存取多重代理程式

如果您要執行多重代理程式,則無需配置多重 Web Server 和 Servlet 實例。您可以在同時執行的代理程式中共用單一 Web Server 和 HTTPS 通道 Servlet 實例。如果多重代理程式實例正共用一個通道 Servlet,您必須配置 imqAddressList 連線工廠屬性,配置內容如下:

  https://hostName:port/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 選項來設定這些特性。

範例 3︰在 Sun Java System Web Server 上部署 HTTPS 通道 Servlet

本節描述如何在 Sun Java System Web Server 上將 HTTPS 通道 Servlet 部署為 JAR 檔案和 WAR 檔案。您使用的方法取決於 Sun Java System Web Server 的版本:如果它不支援 Servlet 2.2 或較高版本,它將無法處理 WAR 檔案部署。

部署為 JAR 檔案

以下說明參考了使用基於瀏覽器的管理 GUI 之 Sun Java System Web Server 6.1 上的部署。此程序包含以下常用步驟:

  1. 新增 Servlet
  2. 配置 Servlet 虛擬路徑
  3. 載入 Servlet
  4. 停用 Servlet 存取記錄

這些步驟將在以下各小節中描述。您可以透過使用 Web 瀏覽器存取 Servlet URL 來驗證成功的 HTTPS 通道 Servlet 部署。它應顯示狀態資訊。

新增 Servlet
    新增通道 Servlet
  1. 選取 [Servlets] 標籤。
  2. 選擇 [配置 Servlet 屬性]。
  3. 在 [Servlet 名稱] 欄位中,為通道 Servlet 指定名稱。
  4. 將 [Servlet 程式碼 (類別名稱)] 欄位設定為以下值:
  5. com.sun.messaging.jmq.transport.
    httptunnel.servlet.HttpsTunnelServlet

  6. 在 [Servlet 類別路徑] 欄位中輸入 imqservlet.jar 的完整路徑。例如:
  7. 在 Solaris 上為 /usr/share/lib/imq/imqservlet.jar

    在 Linux 上為 /opt/imq/lib/imqservlet.jar

    在 Windows 上為 IMQ_HOME/lib/imqservlet.jar

  8. 在 [Servlet 引數] 欄位中,輸入所需引數和選擇性引數,如表 C-4 中所示。
  9. 表 C-4 用於部署 HTTPS 通道 Servlet JAR 檔案的 Servlet 引數

    引數

    預設值

    需要嗎?

    另請參閱

    keystoreLocation

    需要

    表 8-8

    keystorePassword

    需要

    表 8-8

    servletHost

    所有主機

    不需要

    表 C-3

    servletPort

    7674

    不需要

    表 C-3

    使用逗號將引數分隔,例如:

    keystoreLocation=keystore_location, keystorePassword=keystore_password, servletPort=portnumber

    servletHostservletPort 引數僅適用於 Web Server 和代理程式之間的通訊,並且僅在預設值有問題時才設定。但是,在此情況下,您還必須相應地設定代理程式配置特性 (請參閱表 C-3),例如:

    imq.httpsjms.https.servletPort

配置 Servlet 虛擬路徑 (Servlet URL)
    若要配置通道 Servlet 的虛擬路徑 (Servlet URL)
  1. 選取 [Servlets] 標籤。
  2. 選擇 [配置 Servlet 虛擬路徑轉換]。
  3. 設定 [虛擬路徑] 欄位。
  4. 「虛擬路徑」為通道 Servlet URL 的 /contextRoot/tunnel 的一部份:

    https://hostName:port/contextRoot/tunnel

    舉例來說,如果您將 contextRoot 設定至 imq,那麼 [虛擬路徑] 欄位則為:

      /imq/tunnel

  5. 將 [Servlet 名稱] 欄位設定為與「新增 Servlet」步驟 3中相同的值。
載入 Servlet
    在啟動 Web Server 時載入通道 Servlet
  1. 選取 [Servlets] 標籤。
  2. 選擇 [配置全域屬性]。
  3. 在 [啟動 Servlet] 欄位中,輸入與「新增 Servlet」步驟 3中相同的 Servlet 名稱值。
停用伺服器存取記錄

您不必停用伺服器存取記錄,但是如果您停用記錄,將會獲得更好的效能。

    停用伺服器存取記錄
  1. 選取 [狀態] 標籤。
  2. 選擇 [記錄個人喜好頁面]。
  3. 使用記錄用戶端存取控制來停用記錄

部署為 WAR 檔案

以下說明參考了 Sun Java System Web Server 6.0 Service Pack 2 上的部署
。您可以透過使用 Web 瀏覽器存取 Servlet URL 來驗證成功的 HTTPS 通道 Servlet 部署。它應顯示狀態資訊。

在部署 HTTPS 通道 Servlet 之前,請確保 JSSE JAR 檔案包含在 Web Server 的類別路徑中。執行此作業的最簡單方法為將 jsse.jarjnet.jarjcert.jar 複製到 IWS60_TOPDIR/bin/https/jre/lib/ext

此外,在部署 HTTPS 通道 Servlet 之前,您必須修改其部署描述元,以指向您放置密鑰儲存檔案的位置,並指定密鑰儲存密碼。


修改 HTTPS 通道 Servlet WAR 檔案
  1. 將 WAR 檔案複製到暫存目錄。
  2. 在 Solaris 上為 cp /usr/share/lib/imq/imqhttps.war /tmp

    在 Linux 上為 cp /opt/imq/lib/imqhttps.war /tmp

    在 Windows 上為 cp IMQ_HOME/lib/imqhttps.war /tmp

  3. 將此暫存目錄變為您的目前目錄。
  4. $ cd /tmp

  5. 擷取 WAR 檔案的內容。
  6. $ jar xvf imqhttps.war

  7. 列出 WAR 檔案的部署描述元。
  8. $ ls -l WEB-INF/web.xml

  9. 編輯 web.xml 檔案,以便為 keystoreLocationkeystorePassword 引數 (如有必要,還包括 servletPortservletHost 引數) 提供正確的值。
  10. 重新組合 WAR 檔案的內容。
  11. $ jar uvf imqhttps.war WEB-INF/web.xml

此時,您可以使用已修改的 imqhttps.war 檔案來部署 HTTPS 通道 Servlet。(如果您擔心密鑰儲存密碼洩漏,則可以使用檔案系統許可權來限制他人對 imqhttps.war 檔案的存取。)


將 HTTPS 通道 Servlet 部署為 WAR 檔案
  1. 在基於瀏覽器的管理 GUI 中,選取 [虛擬伺服器類別] 標籤。按一下 [管理類別]。
  2. 選取適當的虛擬伺服器類別名稱 (例如 defaultClass),然後按一下 [管理] 按鈕。
  3. 選取 [管理虛擬伺服器]。
  4. 選取適當的虛擬伺服器名稱,然後按一下 [管理] 按鈕。
  5. 選取 [Web 應用程式] 標籤。
  6. 按一下 [部署 Web 應用程式]。
  7. 為 [WAR 檔案開啟] 和 [WAR 檔案路徑] 欄位選取適當的值,以便指向已修改的 imqhttps.war 檔案 (請參閱「修改 HTTPS 通道 Servlet WAR 檔案」。)
  8. 在 [應用程式 URI] 欄位中輸入路徑。
  9. [應用程式 URI] 欄位值為通道 Servlet URL 的 /contextRoot 的一部份:

    https://hostName:port/contextRoot/tunnel

    舉例來說,如果您將 contextRoot 設定至 imq,那麼 [應用程式 URI] 欄位則為:

    /imq

  10. 輸入應部署 Servlet 的安裝目錄路徑 (通常位於 Sun Java System Web Server 安裝根目錄下)。
  11. 按一下 [確定]。
  12. 重新啟動 Web Server 實例。

此時,Servlet 可從以下位址獲得:

https://hostName:port/imq/tunnel

此時,用戶端可使用此 URL,以使用安全 HTTPS 連接而連接至訊息服務。

範例 4︰在 Sun Java System Application Server 7.0 上部署 HTTPS 通道 Servlet

本節描述如何在 Sun Java System Application Server 7.0 上將 HTTPS 通道 Servlet 部署為 WAR 檔案。

您需要執行兩個步驟:

使用部署工具

    在 Application Server 7.0 環境中部署 HTTPS 通道 Servlet
  1. 在基於瀏覽器的管理 GUI 中選取
  2. 應用程式伺服器 > 實例 > server1 > 應用程式 > Web 應用程式。

  3. 按一下 [部署] 按鈕。
  4. 在 [檔案路徑:] 文字欄位輸入 HTTPS 通道 Servlet WAR 檔案 (imqhttps.war) 的位置。
  5. imqhttps.war 檔案的位置會因您的作業系統而有差異 (請參閱 附錄 A「Message Queue 資料的位置」)。

  6. 按一下 [確定]。
  7. 在下一個畫面,於 [環境根式] 文字欄位中設定數值。
  8. [環境根式] 欄位值為通道 Servlet URL 的 /contextRoot 的一部份:

    https://hostName:port/contextRoot/tunnel

    例如,您可以將 [環境根式] 欄位設定為:

    /imq

  9. 按一下 [確定]。
  10. 依預設,接著會出現下一個畫面,表示通道 Servlet 已成功部署在:

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

此時,Servlet 可從以下位址獲得:

https://hostName:port/contextRoot/tunnel

此時,用戶端可使用此 URL,以使用 HTTPS 連接而連接至訊息服務。

修改 server.policy 檔案

Application Server 7.0 會強制一組預設安全策略,除非修改的檔案可以阻止 HTTPS 通道 Servlet 接受來自 Message Queue 代理程式的連接。

每個應用程式伺服器實例,皆有一個包含安全策略或規則的檔案。例如,Solaris 上用於 server1 實例的檔案位置為:

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

若要讓通道 Servlet 接受來自 Message Queue 代理程式的連接,則必須在此檔案新增其他項目。

    若要修改 Application Server 的伺服器策略檔案
  1. 開啟伺服器策略檔案。
  2. 新增以下項目:
  3.  

    grant codeBase

    "file:/var/opt/SUNWappserver7/domains/domain1/server1/

    applications/j2ee-modules/imqhttps_1/-"

    {

    permission java.net.SocketPermission "*",
    "connect,accept,resolve";

    };

     



上一章      目錄      索引      下一章     


Copyright 2004 Sun Microsystems, Inc. All rights reserved.