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

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

第 8 章
管理安全性

此章介紹如何執行與安全性相關的工作。這些工作包括認證、授權和加密。

認證使用者     您負責維護使用者儲存庫中的使用者、使用者群組以及密碼清單。您可以在每個代理程式實例使用不同的使用者儲存庫。本章的第一部分介紹如何建立、寫入和管理使用者儲存庫。如需 Message Queue 安全性的介紹,請參閱「安全性管理程式」

授權使用者: 存取控制特性檔案     您負責編輯存取控制特性檔案,該檔案將每個使用者對代理程式作業的存取權,對映到使用者的名稱或群組成員身份。您可以在每個代理程式實例,使用不同的存取控制特性檔案。本章的第二部分介紹如何自訂此檔案。

加密:使用基於 SSL 的服務 (企業版)     使用基於安全套接層 (SSL) 標準的連接服務,可讓您加密在用戶端與代理程式之間傳送的訊息。如需 Message Queue 如何處理加密的介紹,請參閱「加密 (企業版)」。本章的最後一部分介紹如何設定基於 SSL 的連接服務,並提供有關使用 SSL 的其他資訊。

對於代理程式安全存取 SSL 密鑰儲存、LDAP 使用者儲存庫或 JDBC 相容永久性倉庫所需的密碼,有三種方法可提供此類密碼:


認證使用者

當使用者嘗試連接到代理程式時,此代理程式將透過檢查提供的名稱和密碼認證此使用者,如果名稱和密碼,與系統配置各代理程式要參考之代理程式特定使用者儲存庫中的名稱和密碼相符,則代理程式承認此連接。此儲存庫有兩種類型:

使用文字檔案使用者儲存庫

Message Queue 提供了文字檔案使用者儲存庫和指令行工具,即 Message Queue 使用者管理員 (imqusermgr),您可以使用此工具寫入和管理文字檔案使用者儲存庫。以下各節描述文字檔案使用者儲存庫,以及您如何使用 Message Queue 使用者管理員公用程式 (imqusermgr) 寫入和管理儲存庫。

建立使用者儲存庫

文字檔案使用者儲存庫適用於特定實例。建立的預設使用者儲存庫 (命名為 passwd),用於您啟動的每個代理程式實例。此使用者儲存庫位於以代理程式實例名稱 (instanceName) 作為辨別依據的目錄中,且代理程式實例與儲存庫相互關聯 (請參閱附錄 A「Message Queue 資料的位置」):

.../instances/instanceName/etc/passwd

此儲存庫隨附兩個項目 (列),如以下表 8-1 中所述。

表 8-1 使用者儲存庫中的初始項目 

使用者名稱

密碼

群組

狀態

admin

admin

admin

作用中

guest

guest

anonymous

作用中

這些初始項目可讓 Message Queue 代理程式在安裝之後立即使用,而無須管理員的介入。換言之,要使用的 Message Queue 代理程式無須初始使用者/密碼設定。

初始 guest 使用者項目可讓用戶端使用預設的 guest 使用者名稱和密碼連接到代理程式實例 (例如用於測試)。

初始 admin 使用者項目可讓您使用 imqcmd 指令和預設的 admin 使用者名稱和密碼來管理代理程式實例。我們建議您更新此初始項目來變更密碼 (請參閱「變更預設管理員密碼」)。

以下各節介紹如何寫入和管理文字檔案使用者儲存庫。

使用者管理員公用程式 (imqusermgr)

使用者管理員公用程式 (imqusermgr) 可讓您編輯或寫入文字檔案使用者儲存庫。

本節描述基本的 imqusermgr 指令語法、提供子指令的清單,並總結 imqusermgr 指令選項。後續各節介紹如何使用 imqusermgr 子指令完成特定的工作。

使用 imqusermgr 前,請注意以下事項:

imqusermgr 指令的語法

imqusermgr 指定的一般語法如下:

imqusermgr subcommand [options]
imqusermgr -h
imqusermgr -v

請注意,如果您指定 -v 或 -h 選項,則系統不會執行指令行上指定的子指令。例如,如果您輸入以下指令,則系統會顯示版本資訊但不會執行 list 子指令。

imqusermgr list -v

imqusermgr 子指令

表 8-2 列出了 imqusermgr子指令。

表 8-2 imqusermgr 子指令 

子指令

說明

add [-i instanceName] -u userName -p passwd [-g group] [-s]

將使用者和相關密碼新增到指定的 (或預設的) 代理程式實例儲存庫,並選擇性地指定使用者的群組。

delete [-i instanceName] -u userName [-s] [-f]

從指定的 (或預設的) 代理程式實例儲存庫刪除指定的使用者。

list [-i instanceName] [-u userName]

顯示有關指定的 (或預設的) 代理程式實例儲存庫中,指定的使用者或所有使用者的資訊。

update [-i instanceName] -u userName -p passwd [-a state] [-s] [-f]

update [-i instanceName] -u userName -a state [-p passwd] [-s] [-f]

更新指定的 (或預設的) 代理程式實例儲存庫中,指定之使用者的密碼和/或狀態。


備註

以下各節中的範例均假設為預設的代理程式實例。


imqusermgr 指令選項摘要

表 8-3 列出了 imqusermgr 指令的選項。

表 8-3 imqusermgr 選項  

選項

說明

-a active_state

指定使用者的狀態是否應為作用中 (true/false)。值 true 表示狀態為作用中。這是預設值。

-f

執行動作而無需使用者確認

-h

顯示用法說明。不執行指令行上的其他任何指令。

-i instanceName

指定代理程式實例使用者儲存庫套用的指令。如果未指定,則預設值假設為 instanceNameimqbroker

-p passwd

指定使用者密碼。

-g group

指定使用者群組。有效值為 adminuseranonymous

-s

設定無訊息模式。

-u userName

指定使用者名稱。

-v

顯示版本資訊。不執行指令行上的其他任何指令。

群組

將使用者項目新增到用於代理程式實例的使用者儲存庫時,您可以為此使用者指定預先定義的三個群組之一:adminuseranonymous。如果未指定群組,則指定預設群組 user

為了變更使用者的群組,您必須刪除使用者項目並為此使用者新增其他項目,從而指定新的群組。

您可以指定定義群組成員可執行之作業的存取規則。如需更多資訊,請參閱「授權使用者: 存取控制特性檔案」

狀態

依預設,新增使用者至儲存庫時,使用者的狀態為作用中。若要讓此使用者變成非作用中狀態,您必須使用更新指令。例如,以下指令可讓使用者 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 的密碼變更為 alladin

imqusermgr update -u Katharine -p alladin

若要列出有關一個或所有使用者的資訊,請使用 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 的預設密碼變更為只有您自己知道的密碼。您需要使用 imqusermgr 工具來完成此作業。

以下指令可將 mybroker 代理程式實例的密碼變更為 grandpoobah

imqusermgr update -i mybroker -u admin -p grandpoobah

當代理程式實例正在執行時,您可以透過執行任一指令行工具,來快速確認此變更是否生效。例如,以下指令應生效:

imqcmd list svc -i mybroker -u admin -p grandpoobah

使用舊的密碼應會失敗。

變更密碼後,使用任一 Message Queue 管理工具 (包括管理主控台) 時,您均應提供新的密碼。

將 LDAP 伺服器用於使用者儲存庫

如果您要將 LDAP 伺服器用於使用者儲存庫,則必須在實例配置檔案中設定某些代理程式特性。當使用者嘗試連接到代理程式實例或執行某些訊息作業時,這些特性可讓代理程式實例查詢 LDAP 伺服器,以獲得使用者和群組的相關資訊。實例配置檔案 (config.properties) 位於以代理程式實例名稱 (instanceName) 作為辨別依據的目錄中,且代理程式實例與配置檔案相互關聯 (請參閱附錄 A「Message Queue 資料的位置」):

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


若要編輯配置檔案以使用 LDAP 伺服器
  1. 透過設定以下特性指定您要使用 LDAP 使用者儲存庫:
  2. imq.authentication.basic.user_repository=ldap

  3. 設定 imq.authentication.type 特性,以確定密碼應以基本 64 編碼 (basic) 還是以 MD5 摘要 (digest) 從用戶端傳送至代理程式。當將 LDAP 目錄伺服器用於使用者儲存庫時,您必須將認證類型設定為 basic。例如,
  4. imq.authentication.type=basic

  5. 您還必須設定可控制 LDAP 存取的代理程式特性。這些儲存在代理程式的實例配置文件中的特性,在表 8-5 中有描述。Message Queue 會使用 JNDI API 與 LDAP 目錄伺服器進行通訊。請參閱 JNDI 說明文件,以獲得這些特性中所參考之語法和術語的更多相關資訊。Message Queue 會 Sun JNDI LDAP 供應商和簡單認證。
  6. Message Queue 支援 LDAP 認證防故障備:您可以指定用於嘗試認證的 LDAP 目錄伺服器清單 (請參閱表 8-5中的 imq.user.repos.ldap.server 特性)。

    表 8-5 與 LDAP 相關的特性 

    特性

    說明

    imq.user_repository.
    ldap.server

    用於 LDAP 伺服器的 host:porthost 可指定執行目錄伺服器之主機的完全合格的 DNS 名稱,而 port 指定用於通訊之目錄伺服器的連接埠號。若要指定防故障備用伺服器的清單,請使用下列語法:
    host1:port1 ldap://host2:port2 ldap://host3:port3...
    清單中的項目以空格分開。請注意,第一個防故障備用伺服器後的每個防故障備用伺服器位址皆以 ldap 開頭。

    imq.user_repository.
    ldap.principal

    識別名稱,代理程式將使用此名稱連結至目錄伺服器以進行搜尋。如果目錄伺服器允許匿名搜尋,則無需為此特性指定值。

    imq.user_repository.
    ldap.password

    與代理程式所用識別名稱相關聯的密碼。此特性僅能在密碼檔案中指定 (請參閱「使用密碼檔案」)。

    有數種方法可以提供密碼。最安全的方法是讓代理程式提示您提供密碼。較不安全的方法是使用密碼檔案,並讀取保護密碼檔案。最不安全的方法是使用以下指令行選項指定密碼:imqbrokerd -ldappassword

    如果目錄伺服器允許匿名搜尋,則無需密碼。

    imq.user_repository.
    ldap.base

    用於使用者項目的目錄庫。

    imq.user_repository.
    ldap.uidattr

    供應程式特定的屬性識別碼,其值可唯一識別使用者。例如:uidcn 等。

    imq.user_repository.
    ldap.usrfilter

    JNDI 搜尋過濾器 (表示為邏輯表示式的搜尋查詢)。透過為使用者指定搜尋過濾器,代理程式可以縮小搜尋範圍以便提高效率。如需更多資訊,請參閱位於以下位置的 JNDI 指導http://java.sun.com/products/jndi/tutorial

    此特性可不必設定。

    imq.user_repository.
    ldap.grpsearch

    指定您是否要啟用群組搜尋的布林。請參閱您的 LDAP 供應商提供的說明文件,以確定您是否可以將使用者與群組相關聯。

    請注意,Message Queue 不支援巢式群組。

    預設值:false

    imq.user_repository.
    ldap.grpbase

    用於群組項目的目錄庫。

    imq.user_repository.
    ldap.gidattr

    供應程式特定的屬性識別碼,其值為群組名稱。

    imq.user_repository.
    ldap.memattr

    群組項目中的屬性識別碼,其值為群組成員的識別名稱。

    imq.user_repository.
    ldap.grpfiltler

    JNDI 搜尋過濾器 (表示為邏輯表示式的搜尋查詢)。透過為群組指定搜尋過濾器,代理程式可以縮小搜尋範圍以便提高效率。如需更多資訊,請參閱位於以下位置的 JNDI 教學。

    http://java.sun.com/products/jndi/tutorial

    此特性可不必設定。

    imq.user_repository.
    ldap.timeout

    指定搜尋時間限制的整數 (以秒為單位)。依預設可設定為 180 秒。

    imq.user_repository.
    ldap.ssl.enabled

    指定代理程式與 LDAP 通訊時是否應使用 SSL 協定的布林。依預設可設定為 false

    請參閱代理程式的 default.properties 檔案,以獲得與 LDAP 使用者儲存庫相關的特性設定範例 (預設)。

  7. 如有必要,您需要編輯存取控制特性檔案中的使用者/群組和規則。如需有關使用存取控制特性檔案的更多資訊,請參閱「授權使用者: 存取控制特性檔案」
  8. 如果在連接認證和群組搜尋期間,您要讓代理程式透過 SSL 與 LDAP 目錄伺服器通訊,則需要啟動 LDAP 伺服器中的 SSL,然後在代理程式配置檔案中設定以下特性:
    • 指定 LDAP 伺服器用於 SSL 通訊的連接埠。例如:
    • imq.user_repository.ldap.server=myhost:7878

    • 將代理程式特性 imq.user_repository.ldap.ssl.enabled
      設定為 true


授權使用者:
存取控制特性檔案

連接至代理程式實例之後,使用者可能會產生訊息、使用目標上的訊息,或瀏覽佇列目標上的訊息。當使用者嘗試上述作業時,代理程式會檢查代理程式特定的存取控制特性檔案 (ACL 檔案),查看該使用者是否已被授權執行此作業。ACL 檔案包含的規則可指定特定使用者 (或使用者群組) 已被授權執行哪些作業。依預設,允許所有認證使用者在任何目標上產生和使用訊息。您可以編輯 ACL 檔案,以限制某些使用者和群組執行這些作業。

無論使用者資訊放置在文字檔案使用者儲存庫 (請參閱「使用文字檔案使用者儲存庫」) 或 LDAP 使用者儲存庫 (請參閱「將 LDAP 伺服器用於使用者儲存庫」) 中,均可單獨使用 ACL 檔案。

建立存取控制特性檔案

ACL 檔案為特定實例。建立的預設檔案 (命名為 accesscontrol.properties),用於您啟動的每個代理程式實例。ACL 特性檔案位於以代理程式名稱 (instanceName) 作為辨別依據的目錄中,且代理程式與 ACL 檔案相互關聯 (請參閱附錄 A「Message Queue 資料的位置」):

.../instances/instanceName/etc/accesscontrol.properties

ACL 檔案的格式與 Java 特性檔案的格式類似。它的開始部分定義檔案的版本,然後分三部分指定存取控制規則:

version 特性定義 ACL 特性檔案的版本;您不能變更此項目。

version=JMQFileAccessControlModel/100

以下描述存取規則的基本語法並介紹如何計算許可權,並且還描述指定存取控制的 ACL 檔案的三個部分。

存取規則語法

在 ACL 特性檔案中,存取控制定義了特定使用者或群組對受保護的資源 (如目標和連接服務) 擁有何種存取權。存取控制由一條規則或一組規則表示,每條規則用一個 Java 特性表示:

這些規則的基本語法如下:

resourceType.resourceVariant.operation.access.principalType = principals

表 8-6 描述了語法規則的元素。

表 8-6 存取規則的語法元素 

元素

說明

resourceType

為以下之一:connectionqueuetopic

resourceVariant

resourceType 指定的類型實例。例如,myQueue。萬用字元符號 (*) 可用於表示所有連接服務類型或所有目標。

operation

值取決於要制定的存取規則種類。

access

為以下之一:allowdeny

principalType

為以下之一:usergroup。如需更多資訊,請參閱「群組」

principals

可以擁有在規則左側指定的存取權的使用者。如果 principalTypeuser,則此項可以為個別使用者或使用者清單 (以逗號分隔);如果 principalTypegroup,則此項可以為單一群組或群組清單 (以逗號分隔的清單)。萬用字元符號 (*) 可用於表示所有使用者或所有群組。

以下為存取規則的一些範例:

許可權運算

當運算一系列規則所包含的許可權時,可套用以下原則:

連接存取控制

ACL 特性檔案中的連接存取控制部分,包含用於代理程式連接服務的存取控制規則。連接存取控制規則的語法如下:

connection.resourceVariant.access.principalType = principals

resourceVariant 定義有兩個值:NORMALADMIN。依預設,所有使用者對 NORMAL 類型連接服務擁有存取權,但是只有那些群組為 admin 的使用者才對 ADMIN 類型連接服務擁有存取權。

您可以編輯連接存取控制規則,以限制使用者的連接存取權限。例如,以下規則拒絕 Bob 存取 NORMAL,但是允許其他所有使用者進行存取:

connection.NORMAL.deny.user=Bob

connection.NORMAL.allow.user=*

您可以使用星號 (*) 字元來指定所有認證使用者或群組。

您不能建立自己的服務類型;您必須將自己限制於由常數 NORMALADMIN 所指定的預先定義類型之內。

目標存取控制

存取控制特性檔案的目標存取控制部分,包含基於目標的存取控制規則。這些規則確定何人 (使用者/群組) 可以在何處 (目標) 做什麼 (作業)。這些規則所規定的存取權類型包括:將訊息傳送至佇列、將訊息出版至主題、接收來自佇列的訊息、訂閱主題以及瀏覽佇列中的訊息。

依預設,任何使用者或群組對任何目標擁有所有類型的存取權。您可以新增多條特定的目標存取規則,或編輯預設規則。本節的其餘部分介紹目標存取規則的語法,您必須理解此語法以編寫自己的規則。

目標規則的語法如下:

resourceType.resourceVariant.operation.access.principalType = principals

表 8-7 描述了這些元素:

表 8-7 目標存取控制規則的元素

元件

說明

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.create.allow.user=*

topic.create.deny.user=Snoopy

請注意,目標自動建立規則的效果必須與目標存取規則的效果一致。例如,如果您 1) 變更目標存取規則,以禁止任何使用者將訊息傳送至目標,但是 2) 啟用目標的自動建立功能,如果此目標不存在,則代理程式將會建立此目標,但不會將訊息發送至此目標。


加密:使用基於 SSL 的服務 (企業版)

Message Queue 企業版支援基於安全套接層 (SSL) 標準的連接服務:透過 TCP/IP (ssljmsssladmin) 和透過 HTTP (httpsjms)。這些基於 SSL 的連接服務允許加密在用戶端與代理程式之間傳送的訊息。目前的 Message Queue 版次支援基於自身簽名伺服器憑證的 SSL 加密。

若要使用基於 SSL 的連接服務,您需要使用鍵值工具公用程式 (imqkeytool) 產生私密密鑰/公開密鑰對。此公用程式將公開密鑰內嵌於自身簽名的憑證中,此憑證被傳送至請求與代理程式連接的用戶端,此用戶端使用此憑證設定加密連接。

雖然 Message Queue 的基於 SSL 的連接服務在概念上相似,但是在設定方法上卻有些差異。因此,以下各節分別說明透過 TCP/IP 和 HTTP 的安全連接。

透過 TCP/IP 設定基於 SSL 的服務

三種基於 SSL 的連接服務可提供透過 TCP/IP 的直接且安全的連接。

ssljms     此連接服務用於在用戶端與代理程式之間,透過安全且加密的連接發送訊息。

ssladmin     此連接服務用於在 Message Queue 指令公用程式 (imqcmd) 這種指令行管理工具與代理程式之間建立安全且加密的連接。管理主控台 (imqadmin) 不支援安全連接。

叢集     此連接服務用於叢集中代理程式之間,透過安全且加密的連接發送訊息 (請參閱「安全代理程式互通連接」)。

    若要設定基於 SSL 的連接服務
  1. 產生自身簽名的憑證。
  2. 啟用 ssljms 連接服務、ssladmin 連接服務,或代理程式中的叢集連接服務。
  3. 啟動代理程式。
  4. 設定並執行用戶端 (僅適用於 ssljms 連接服務)。

除步驟 4 (配置並執行用戶端) 之外,設定 ssljms 連接服務的程序與設定 ssladmin 連接服務的程序相同。

以下各節較詳細地說明每個步驟。

步驟 1. 產生自身簽名的憑證

在假設用戶端正與已知且可信任的伺服器通訊的情況下,Message Queue 的 SSL 支援可保護線上資料。因此,僅使用自身簽名的憑證即可實施 SSL。

執行 imqkeytool 指令,以便為代理程式產生自身簽名的憑證。同樣的憑證可以用於 ssljms 連接服務、ssladmin 連接服務或叢集連接服務。在命令提示字元下輸入以下內容:

imqkeytool -broker

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

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


備註

請記住您所提供的密碼,稍後您需要將此密碼提供給代理程式 (當您啟動它時),以便代理程式可開啟密鑰儲存。您還可以將密鑰儲存密碼儲存在密碼檔案中 (請參閱「使用密碼檔案」)。


執行 imqkeytool 可執行 JDK keytool 公用程式,以產生自身簽名的憑證,並將其放在 Message Queue 密鑰儲存中,且如附錄 A「Message Queue 資料的位置」中所示,其目錄位置因作業系統而異。

此密鑰儲存的格式與 JDK1.2 keytool 公用程式支援的格式相同。

Message Queue 密鑰儲存的可配置特性如表 8-8 中所示。(如需有關配置這些特性的說明,請參閱第 5 章「啟動與配置代理程式」。)

表 8-8 密鑰儲存特性 

特性名稱

說明

imq.keystore.file.
dirpath

用於基於 SSL 的服務:指定包含密鑰儲存檔案之目錄的路徑。預設值:請參閱附錄 A「Message Queue 資料的位置」

imq.keystore.file.name

用於基於 SSL 的服務:指定密鑰儲存檔案的名稱。
預設值:keystore

imq.keystore.password

用於基於 SSL 的服務:指定密鑰儲存密碼。此特性僅能在密碼檔案中指定 (請參閱「使用密碼檔案」)。

有數種方法可以提供密碼。最安全的方法是讓代理程式提示您提供密碼。較不安全的方法是使用密碼檔案,並讀取保護密碼檔案。最不安全的方法是使用以下指令行選項指定密碼:imqbrokerd -ldappassword

您可能需要重新產生鍵對以解決某些問題;例如:

    若要重新產生鍵對
  1. 移除代理程式的密鍵儲存,如附錄 A「Message Queue 資料的位置」中所示
  2. 重新執行 imqkeytool 以產生鍵對,如「步驟 1. 產生自身簽名的憑證」中所述。

步驟 2. 啟用代理程式中基於 SSL 的服務

若要啟用代理程式中基於 SSL 的服務,您需要將 ssljms (或 ssladmin) 新增到 imq.service.activelist 特性。


備註

請使用 imq.cluster.transport特性啟用基於 SSL 的 cluster (叢集) 連接服務,而非使用 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. 啟動代理程式

啟動代理程式,提供密鑰儲存密碼。您可以用以下任何一種方法提供密碼:

如需與密碼檔案相關的代理程式特性的清單,請參閱表 2-6

當您啟動具有 SSL 的代理程式或用戶端時,您可能會注意到它消耗了很多 CPU 週期,長達幾秒鐘。這是因為 Message Queue 使用 JSSE (Java 安全套接延伸) 以實施 SSL。JSSE 使用 java.security.SecureRandom() 產生隨機數字。此方法建立初始隨機數種子要佔用大量時間,這就是您所看到 CPU 使用率增加的原因。建立種子之後,CPU 使用率會降至正常。

步驟 4. 配置並執行基於 SSL 的用戶端

最後,您需要將用戶端配置為使用安全連接服務。依據您使用的連接服務,有兩種類型的用戶端:使用 ssljms 的應用程式用戶端,和使用 ssladmin 的 Message Queue 管理用戶端 (例如 imqcmd)。這兩種用戶端將在以下各節中分別描述。

應用程式用戶端

您必須確保用戶端在其類別路徑中擁有必要的安全套接延伸 (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 Java 用戶端開發人員指南」中有關使用受管理物件的章節。

管理用戶端 (imqcmd)

您可以透過使用 imqcmd時包括的 -secure 選項,建立安全管理連接 (請參閱表 6-2),例如:

imqcmd list svc -b hostName:port -u adminName -p adminPassword -secure

其中 adminNameadminPassword 在 Message Queue 使用者儲存庫中為有效項目。(如果您是使用文字檔案儲存庫,請參閱「變更預設管理員密碼」)。

列出連接服務是顯示 ssladmin 服務正在執行的一種方法,也是您可以成功建立安全 admin 連接的一種方法,如以下輸出中所示:

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.

透過 HTTP 設定基於 SSL 的服務

在此基於 SSL 的連接服務 (httpsjms) 中,用戶端和代理程式藉由 HTTPS 通道 Servlet 建立安全連接。附錄 C「HTTP/HTTPS 支援 (企業版)」中描述了 HTTPS 支援的架構和實施。


使用密碼檔案

當您想讓代理程式啟動而不提示您提供所需密碼,或不要求您將這些密碼作為 imqbrokerd 指令的選項提供時,您可以將所需密碼放在密碼檔案中。接著,可以在啟動代理程式時,使用 -passfile 選項指定密碼檔案:

imqbrokerd -passfile myPassfile

密碼檔案為包含密碼的簡單文字檔。此檔案未加密,因此不如手動提供密碼安全。然而,您可以設定此檔案的許可權,限制何人有權檢視它。密碼檔案上設定的許可權,需要提供啟動代理程式的使用者讀取權限。

密碼檔案可以包含表 8-9 中所示密碼:

表 8-9 密碼檔案中的密碼

密碼

說明

imq.keystore.password

為基於 SSL 的服務指定密鑰儲存密碼 (請參閱表 8-8)。

imq.user_repository.ldap.
password

指定與識別名稱相關聯的密碼,此識別名稱指定給代理程式以連結至已配置的 LDAP 使用者儲存庫 (請參閱表 8-5)。

imq.persist.jdbc.password

如有必要,則指定用於開啟資料庫連接的密碼 (請參閱 表 B-1)。

可以在某個位置找到密碼檔案範例,其所在位置因作業系統而異,如附錄 A「Message Queue 資料的位置」中所示。



上一章      目錄      索引      下一章     


Copyright 2004 Sun Microsystems, Inc. All rights reserved.