Sun Java System Message Queue 3.5 SP1 管理指南 |
第 8 章
管理安全性此章介紹如何執行與安全性相關的工作。這些工作包括認證、授權和加密。
認證使用者 您負責維護使用者儲存庫中的使用者、使用者群組以及密碼清單。您可以在每個代理程式實例使用不同的使用者儲存庫。本章的第一部分介紹如何建立、寫入和管理使用者儲存庫。如需 Message Queue 安全性的介紹,請參閱「安全性管理程式」。
授權使用者: 存取控制特性檔案 您負責編輯存取控制特性檔案,該檔案將每個使用者對代理程式作業的存取權,對映到使用者的名稱或群組成員身份。您可以在每個代理程式實例,使用不同的存取控制特性檔案。本章的第二部分介紹如何自訂此檔案。
加密:使用基於 SSL 的服務 (企業版) 使用基於安全套接層 (SSL) 標準的連接服務,可讓您加密在用戶端與代理程式之間傳送的訊息。如需 Message Queue 如何處理加密的介紹,請參閱「加密 (企業版)」。本章的最後一部分介紹如何設定基於 SSL 的連接服務,並提供有關使用 SSL 的其他資訊。
對於代理程式安全存取 SSL 密鑰儲存、LDAP 使用者儲存庫或 JDBC 相容永久性倉庫所需的密碼,有三種方法可提供此類密碼:
- 透過啟動代理程式時讓系統提示您輸入密碼
- 透過啟動代理程式時將密碼儲存在系統可存取的密碼檔案中 (請參閱「使用密碼檔案」)
認證使用者當使用者嘗試連接到代理程式時,此代理程式將透過檢查提供的名稱和密碼認證此使用者,如果名稱和密碼,與系統配置各代理程式要參考之代理程式特定使用者儲存庫中的名稱和密碼相符,則代理程式承認此連接。此儲存庫有兩種類型:
如需有關設定與管理使用者儲存庫的更多資訊,請參閱「使用文字檔案使用者儲存庫」。
LDAP 目錄伺服器可以是現有或新的 LDAP 目錄伺服器,它將使用 LDAP v2 或 v3 協定。它不如文字檔案儲存庫易於使用,但是它很安全且可延伸,因此更適用於生產環境。
如果您要使用 LDAP 使用者儲存庫,則將需要使用 LDAP 供應商提供的工具來寫入和管理此使用者儲存庫。如需更多資訊,請參閱「將 LDAP 伺服器用於使用者儲存庫」。
使用文字檔案使用者儲存庫
Message Queue 提供了文字檔案使用者儲存庫和指令行工具,即 Message Queue 使用者管理員 (imqusermgr),您可以使用此工具寫入和管理文字檔案使用者儲存庫。以下各節描述文字檔案使用者儲存庫,以及您如何使用 Message Queue 使用者管理員公用程式 (imqusermgr) 寫入和管理儲存庫。
建立使用者儲存庫
文字檔案使用者儲存庫適用於特定實例。建立的預設使用者儲存庫 (命名為 passwd),用於您啟動的每個代理程式實例。此使用者儲存庫位於以代理程式實例名稱 (instanceName) 作為辨別依據的目錄中,且代理程式實例與儲存庫相互關聯 (請參閱附錄 A「Message Queue 資料的位置」):
.../instances/instanceName/etc/passwd
此儲存庫隨附兩個項目 (列),如以下表 8-1 中所述。
這些初始項目可讓 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子指令。
imqusermgr 指令選項摘要
表 8-3 列出了 imqusermgr 指令的選項。
群組
將使用者項目新增到用於代理程式實例的使用者儲存庫時,您可以為此使用者指定預先定義的三個群組之一:admin、user 或 anonymous。如果未指定群組,則指定預設群組 user。
- admin 群組 用於代理程式管理員。依預設,已指定此群組的使用者可以配置和管理代理程式。您可以將多個使用者指定給 admin 群組。
- user 群組 用於一般 (非管理) Message Queue 用戶端使用者。大多數用戶端使用者會存取已在 user 群組中認證的代理程式。依預設,此群組中的應用程式用戶端使用者可以產生訊息到所有主題與佇列,以及使用來自所有主題與佇列的訊息,或者瀏覽任何佇列中的訊息。
- anonymous 群組 用於 Message Queue 用戶端,這些用戶端不想使用代理程式知道的使用者名稱 (可能因為用戶端應用程式不知道要使用的實際使用者名稱)。這對於大多數 FTP 伺服器中存在的匿名帳號均類似。您一次僅可將一個使用者指定給 anonymous 群組。預計您將透過存取控制限制此群組的存取權限 (與 user 群組相比較),或者您將在部署時從此群組中移除使用者。
為了變更使用者的群組,您必須刪除使用者項目並為此使用者新增其他項目,從而指定新的群組。
您可以指定定義群組成員可執行之作業的存取規則。如需更多資訊,請參閱「授權使用者: 存取控制特性檔案」。
狀態
依預設,新增使用者至儲存庫時,使用者的狀態為作用中。若要讓此使用者變成非作用中狀態,您必須使用更新指令。例如,以下指令可讓使用者 JoeD 的狀態變成非作用中:
imqusermgr update -u JoeD -a false
已變成非作用中使用者的項目保留在儲存庫中;但是,非作用中使用者無法開啟新的連接。如果使用者為非作用中,且您新增具有相同名稱的其他使用者,則作業將失敗。您必須刪除非作用中使用者項目或變更新使用者的名稱,或者為新使用者命名其他名稱。這可防止您新增重複的使用者名稱。
使用者名稱與密碼的格式
使用者名稱與密碼必須遵循以下原則:
- 使用者名稱不能包含表 8-4 中所列的字元。
- 使用者名稱與密碼不能包含新行或換行鍵作為字元。
- 如果名稱或密碼包含空格,則必須將整個名稱或密碼括在引號內。
- 名稱或密碼必須至少包含一個字元。
- 密碼或使用者名稱的長度沒有限制,除非指令 shell 對指令行上可輸入字元的最大數目強加限制。
寫入和管理使用者儲存庫
使用 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
變更預設管理員密碼
為了安全性,您應將 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 伺服器
- 透過設定以下特性指定您要使用 LDAP 使用者儲存庫:
imq.authentication.basic.user_repository=ldap
- 設定 imq.authentication.type 特性,以確定密碼應以基本 64 編碼 (basic) 還是以 MD5 摘要 (digest) 從用戶端傳送至代理程式。當將 LDAP 目錄伺服器用於使用者儲存庫時,您必須將認證類型設定為 basic。例如,
imq.authentication.type=basic
- 您還必須設定可控制 LDAP 存取的代理程式特性。這些儲存在代理程式的實例配置文件中的特性,在表 8-5 中有描述。Message Queue 會使用 JNDI API 與 LDAP 目錄伺服器進行通訊。請參閱 JNDI 說明文件,以獲得這些特性中所參考之語法和術語的更多相關資訊。Message Queue 會 Sun JNDI LDAP 供應商和簡單認證。
Message Queue 支援 LDAP 認證防故障備:您可以指定用於嘗試認證的 LDAP 目錄伺服器清單 (請參閱表 8-5中的 imq.user.repos.ldap.server 特性)。
表 8-5 與 LDAP 相關的特性
特性
說明
imq.user_repository.
ldap.server用於 LDAP 伺服器的 host:port。host 可指定執行目錄伺服器之主機的完全合格的 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供應程式特定的屬性識別碼,其值可唯一識別使用者。例如:uid 和 cn 等。
imq.user_repository.
ldap.usrfilterJNDI 搜尋過濾器 (表示為邏輯表示式的搜尋查詢)。透過為使用者指定搜尋過濾器,代理程式可以縮小搜尋範圍以便提高效率。如需更多資訊,請參閱位於以下位置的 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.grpfiltlerJNDI 搜尋過濾器 (表示為邏輯表示式的搜尋查詢)。透過為群組指定搜尋過濾器,代理程式可以縮小搜尋範圍以便提高效率。如需更多資訊,請參閱位於以下位置的 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 使用者儲存庫相關的特性設定範例 (預設)。
- 如有必要,您需要編輯存取控制特性檔案中的使用者/群組和規則。如需有關使用存取控制特性檔案的更多資訊,請參閱「授權使用者: 存取控制特性檔案」。
- 如果在連接認證和群組搜尋期間,您要讓代理程式透過 SSL 與 LDAP 目錄伺服器通訊,則需要啟動 LDAP 伺服器中的 SSL,然後在代理程式配置檔案中設定以下特性:
授權使用者:
存取控制特性檔案連接至代理程式實例之後,使用者可能會產生訊息、使用目標上的訊息,或瀏覽佇列目標上的訊息。當使用者嘗試上述作業時,代理程式會檢查代理程式特定的存取控制特性檔案 (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 存取規則的語法元素
元素
說明
resourceType
為以下之一:connection、queue 或 topic。
resourceVariant
resourceType 指定的類型實例。例如,myQueue。萬用字元符號 (*) 可用於表示所有連接服務類型或所有目標。
operation
值取決於要制定的存取規則種類。
access
為以下之一:allow 或 deny。
principalType
為以下之一:user 或 group。如需更多資訊,請參閱「群組」。
principals
可以擁有在規則左側指定的存取權的使用者。如果 principalType 為 user,則此項可以為個別使用者或使用者清單 (以逗號分隔);如果 principalType 為 group,則此項可以為單一群組或群組清單 (以逗號分隔的清單)。萬用字元符號 (*) 可用於表示所有使用者或所有群組。
以下為存取規則的一些範例:
- 以下規則表示所有使用者均可以將訊息傳送至名為 q1 的佇列。
queue.q1.produce.allow.user=*
- 以下規則表示任何使用者均可以將訊息傳送至任何佇列。
queue.*.produce.allow.user=*
備註
若要指定非 ASCII 的使用者、群組或目標名稱,您必須使用統一碼退出符號 (\uXXXX) 表示法。如果您已經編輯並儲存具有非 ASCII 編碼名稱的 ACL 檔案,則可以使用 Java native2ascii 工具將其轉換為 ASCII。如需更加詳細的資訊,請參閱 http://java.sun.com/j2se/1.4/docs/guide/intl/faq.html
許可權運算
當運算一系列規則所包含的許可權時,可套用以下原則:
- 特定存取規則置換一般存取規則。套用以下兩條規則之後,所有使用者均可以將訊息傳送至所有佇列,但是 Bob 卻無法將訊息傳送至 tq1。
queue.*.produce.allow.user=*
queue.tq1.produce.deny.user=Bob
- 賦予明確 principal 的存取權置換賦予 * principal 的存取權。以下規則拒絕 Bob 向 tq1 產生訊息,但允許其他所有使用者向 tq1 產生訊息。
queue.tq1.produce.allow.user=*
queue.tq1.produce.deny.user=Bob
- 用於使用者的 * principal 規則置換用於群組的相應 * principal 規則。例如,以下兩條規則允許所有認證使用者將訊息傳送至 tq1。
queue.tq1.produce.allow.user=*
queue.tq1.produce.deny.group=*
- 授予使用者的存取權會置換授予使用者群組的存取權。在以下範例中,如果 Bob 為 User 成員,則他將被拒絕向 tq1 產生訊息,但是 User 的所有其他成員均可以向 tq1 產生訊息。
queue.tq1.produce.allow.group=User
queue.tq1.produce.deny.user=Bob
- 任何未透過存取規則明確授予的存取許可權,都會被默認拒絕。例如,如果 ACL 檔案不包含存取規則,則所有使用者均被拒絕所有作業。
- 相同使用者或群組的拒絕和允許許可權會相互抵銷。例如,以下兩條規則導致 Bob 無法瀏覽 q1:
queue.q1.browse.allow.user=Bob
queue.q1.browse.deny.user=Bob
連接存取控制
ACL 特性檔案中的連接存取控制部分,包含用於代理程式連接服務的存取控制規則。連接存取控制規則的語法如下:
connection.resourceVariant.access.principalType = principals
resourceVariant 定義有兩個值:NORMAL 與 ADMIN。依預設,所有使用者對 NORMAL 類型連接服務擁有存取權,但是只有那些群組為 admin 的使用者才對 ADMIN 類型連接服務擁有存取權。
您可以編輯連接存取控制規則,以限制使用者的連接存取權限。例如,以下規則拒絕 Bob 存取 NORMAL,但是允許其他所有使用者進行存取:
connection.NORMAL.deny.user=Bob
connection.NORMAL.allow.user=*
您可以使用星號 (*) 字元來指定所有認證使用者或群組。
您不能建立自己的服務類型;您必須將自己限制於由常數 NORMAL 與 ADMIN 所指定的預先定義類型之內。
目標存取控制
存取控制特性檔案的目標存取控制部分,包含基於目標的存取控制規則。這些規則確定何人 (使用者/群組) 可以在何處 (目標) 做什麼 (作業)。這些規則所規定的存取權類型包括:將訊息傳送至佇列、將訊息出版至主題、接收來自佇列的訊息、訂閱主題以及瀏覽佇列中的訊息。
依預設,任何使用者或群組對任何目標擁有所有類型的存取權。您可以新增多條特定的目標存取規則,或編輯預設規則。本節的其餘部分介紹目標存取規則的語法,您必須理解此語法以編寫自己的規則。
目標規則的語法如下:
resourceType.resourceVariant.operation.access.principalType = principals
表 8-7 目標存取控制規則的元素
元件
說明
resourceType
必須為 queue 或 topic 之一。
resourceVariant
目標名稱或所有目標 (*),表示所有佇列或所有主題。
operation
必須為 produce、consume 或 browse 之一。
access
必須為 allow 或 deny 之一。
principalType
必須為 user 或 group 之一。
存取權可以賦予一個或多個使用者和/或一個或多個群組。
以下範例說明了不同種類的目標存取控制規則:
目標自動建立存取控制
ACL 特性檔案的最後部分,包括指定代理程式將為哪些使用者和群組自動建立目標的存取規則。
當使用者在並不存在的目標上建立產生者或使用者時,如果代理程式的自動建立特性已啟用且實體目標不存在,則代理程式將建立此目標。
依預設,任何使用者或群組均有權讓代理程式自動建立目標。此權限由以下規則指定:
queue.create.allow.user=*
topic.create.allow.user=*
您可以編輯 ACL 檔案以限制此類型的存取權。
目標自動建立存取規則的一般語法如下:
resourceType.create.access.principalType = principals
其中 resourceType 為 queue 或 topic。
例如,以下規則可讓代理程式為除 Snoopy 之外的所有使用者自動建立主題目標。
topic.create.allow.user=*
topic.create.deny.user=Snoopy
請注意,目標自動建立規則的效果必須與目標存取規則的效果一致。例如,如果您 1) 變更目標存取規則,以禁止任何使用者將訊息傳送至目標,但是 2) 啟用目標的自動建立功能,如果此目標不存在,則代理程式將會建立此目標,但不會將訊息發送至此目標。
加密:使用基於 SSL 的服務 (企業版)Message Queue 企業版支援基於安全套接層 (SSL) 標準的連接服務:透過 TCP/IP (ssljms 與 ssladmin) 和透過 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 的連接服務
除步驟 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 的服務:指定密鑰儲存檔案的名稱。
預設值:keystoreimq.keystore.password
用於基於 SSL 的服務:指定密鑰儲存密碼。此特性僅能在密碼檔案中指定 (請參閱「使用密碼檔案」)。
有數種方法可以提供密碼。最安全的方法是讓代理程式提示您提供密碼。較不安全的方法是使用密碼檔案,並讀取保護密碼檔案。最不安全的方法是使用以下指令行選項指定密碼:imqbrokerd -ldappassword。
您可能需要重新產生鍵對以解決某些問題;例如:
可能導致此異常的原因為,您提供的鍵密碼與您在「步驟 1. 產生自身簽名的憑證」中產生自身簽名憑證時的密鑰儲存密碼不同。
若要重新產生鍵對
- 移除代理程式的密鍵儲存,如附錄 A「Message Queue 資料的位置」中所示
- 重新執行 imqkeytool 以產生鍵對,如「步驟 1. 產生自身簽名的憑證」中所述。
步驟 2. 啟用代理程式中基於 SSL 的服務
若要啟用代理程式中基於 SSL 的服務,您需要將 ssljms (或 ssladmin) 新增到 imq.service.activelist 特性。
備註
請使用 imq.cluster.transport特性啟用基於 SSL 的 cluster (叢集) 連接服務,而非使用 imq.service.activelist 特性。請參閱「安全代理程式互通連接」。
若要啟用代理程式中基於 SSL 的服務
- 開啟代理程式的實例配置檔案。
實例配置檔案位於以代理程式實例名稱 (instanceName) 作為辨別依據的目錄中,且代理程式實例與配置檔案相互關聯 (請參閱附錄 A「Message Queue 資料的位置」):
.../instances/instanceName/props/config.properties
- 新增用於 imq.service.activelist特性的項目 (如果項目不存在的話),並將基於 SSL 的服務納入清單。
依預設,特性包括 jms 和 admin 連接服務。您必須新增 ssljms 或 ssladmin 連接服務,或兩者皆新增 (因您要啟動的服務而異)。
imq.service.activelist=jms,admin,ssljms,ssladmin
步驟 3. 啟動代理程式
啟動代理程式,提供密鑰儲存密碼。您可以用以下任何一種方法提供密碼:
- 當代理程式啟動時讓它提示您提供密碼
imqbrokerd
Please enter Keystore password:mypassword- 使用 imqbrokerd 指令的 -password 選項:
imqbrokerd -password mypassword
- 將密碼放在密碼檔案中 (請參閱「使用密碼檔案」),代理程式啟動時將存取此檔案。您必須先設定以下代理程式配置特性 (請參閱「編輯實例配置檔案」):
imq.passfile.enabled=true
如需與密碼檔案相關的代理程式特性的清單,請參閱表 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 連接服務。
- 如果您的用戶端未使用 J2SDK1.4 (具有內建的 JSSE 與 JNDI 支援),請確保用戶端在其類別路徑中擁有以下 JAR 檔案:
jsse.jar、jnet.jar、jcert.jar 和 jndi.jar
- 確保用戶端在其類別路徑中擁有以下 Message Queue JAR 檔案:
imq.jar 和 jms.jar
- 啟動用戶端並將其連接至代理程式的 ssljms 服務。完成此作業的方法之一是輸入以下指令:
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
其中 adminName 和 adminPassword 在 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 資料的位置」中所示。