![]() | |
Sun Java System Message Queue 3 2005Q1 管理指南 |
第 7 章
管理安全性管理員負責配置用於認證使用者的使用者儲存庫、定義存取控制、配置用於加密用戶端與代理程式間之通訊的安全套接層 (SSL) 連線服務,以及設定用於啟動代理程式的密碼檔案。
本章包含以下各節:
認證使用者您負責維護使用者儲存庫中的使用者、使用者群組以及使用者密碼清單。您可以在每個代理程式實例使用不同的使用者儲存庫。本節介紹如何建立、寫入和管理儲存庫。
當使用者嘗試連線至代理程式時,此代理程式將透過檢查提供的名稱和密碼,認證此使用者。如果名稱和密碼與配置每個代理程式要參考的特定使用者儲存庫中的名稱和密碼相符,則代理程式承認此連線。
儲存庫可能是下列任一類型:
如需有關設定與管理使用者儲存庫的更多資訊,請參閱使用文字檔案使用者儲存庫.。
LDAP 目錄伺服器可以是現有或新的 LDAP 目錄伺服器,它將使用 LDAP v2 或 v3 協定。它不如文字檔案儲存庫易於使用,但是它可延伸,因此更適用於生產環境。
如果您要使用 LDAP 使用者儲存庫,您可以使用 LDAP 供應商提供的工具來寫入和管理此使用者儲存庫。如需更多資訊,請參閱將 LDAP 伺服器用於使用者儲存庫。
使用文字檔案使用者儲存庫
Message Queue 提供了文字檔案使用者儲存庫和指令行工具,即 Message Queue 使用者管理員 (imqusermgr),您可以使用此工具寫入和管理文字檔案使用者儲存庫。以下各節描述文字檔案使用者儲存庫,以及您如何使用 Message Queue 使用者管理員公用程式 (imqusermgr) 寫入和管理儲存庫。
建立使用者儲存庫
文字檔案使用者儲存庫適用於特定實例。建立的預設使用者儲存庫 (命名為 passwd),用於您啟動的每個代理程式實例。此使用者儲存庫位於以代理程式實例名稱作為辨別依據的目錄中,且代理程式實例與儲存庫相互關聯 (請參閱附錄 A「Message Queue 資料的作業系統特定位置」):
…/instances/instanceName/etc/passwd
此儲存庫隨附兩個項目 (列),如以下表 7-1 中所述。
這些初始項目可讓 Message Queue 代理程式在安裝之後立即使用,而無須管理員的介入。Message Queue 代理程式無須初始使用者/密碼設定。
初始 guest 使用者項目可讓用戶端使用預設的 guest 使用者名稱和密碼連線到代理程式實例 (例如用於測試)。
初始 admin 使用者項目可讓您使用 imqcmd 指令和預設的 admin 使用者名稱和密碼來管理代理程式實例。您應該更新此初始項目來變更密碼 (請參閱變更預設管理員密碼)。
以下各節介紹如何寫入和管理文字檔案使用者儲存庫。
使用者管理員公用程式 (imqusermgr)
使用者管理員公用程式 (imqusermgr) 可讓您編輯或寫入文字檔案使用者儲存庫。本節介紹使用者管理員公用程式。後續各節介紹如何使用 imqusermgr 子指令完成特定的工作。
如需 imqusermgr 指令的完整參照資訊,請參閱第 13 章「指令參照」。
使用 imqusermgr 前,請注意以下事項:
子指令
imqusermgr 指令有子指令 add、delete、list 和 update。
add 子指令 add 子指令可以將使用者和相關密碼新增到指定的 (或預設的) 代理程式實例儲存庫,並選擇性地指定使用者的群組。子指令語法如下:
add [-i instanceName] -u userName -p passwd [-g group] [-s]
delete 子指令 delete 子指令可以從指定的 (或預設的) 代理程式實例儲存庫刪除指定的使用者。子指令語法如下:
delete [-i instanceName] -u userName [-s] [-f]
list 子指令 list 子指令可以顯示有關指定的 (或預設的) 代理程式實例儲存庫中,指定的使用者或所有使用者的資訊。子指令語法如下:
list [-i instanceName] [-u userName]
update 子指令 update 子指令可以更新指定的 (或預設的) 代理程式實例儲存庫中,指定之使用者的密碼和/或狀態。子指令語法如下:
update [-i instanceName] -u userName -p passwd [-a state] [-s] [-f]
update [-i instanceName] -u userName -a state [-p passwd] [-s] [-f]
指令選項
表 7-2 列出了 imqusermgr 指令的選項。
群組
為代理程式實例的使用者儲存庫新增使用者項目時,您可以指定三個預先定義群組中的任一項:admin、user 或 anonymous。如果未指定群組,則指定預設群組 user。
- admin 群組 用於代理程式管理員。依預設,已指定此群組的使用者可以配置和管理代理程式。您可以將多個使用者指定給 admin 群組。
- user 群組 用於一般 (非管理) Message Queue 用戶端使用者。大多數用戶端使用者屬於 user 群組。依預設,此群組中的使用者可以產生訊息到所有主題與佇列、使用來自所有主題與佇列的訊息,以及瀏覽任何佇列中的訊息。
- anonymous 群組。 用於 Message Queue 用戶端,這些用戶端不想使用代理程式知道的使用者名稱 (可能因為用戶端應用程式不知道要使用的實際使用者名稱)。這帳號對於大多數 FTP 伺服器中存在的匿名帳號均類似。您一次僅可將一個使用者指定給 anonymous 群組。您應當限制此群組的存取權限 (與 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 的密碼變更為 aladdin:
imqusermgr update -u Katharine -p aladdin
若要列出有關一個或所有使用者的資訊,請使用 list 指令。以下指令顯示有關名為 isa 的使用者之資訊:
imqusermgr list -u isa
% imqusermgr list -u isa
用於代理實例的使用者儲存庫:imqbroker
----------------------------------
使用者名稱 群組 使用中狀態
----------------------------------
isa admin true
以下指令列出有關所有使用者的資訊:
imqusermgr list
變更預設管理員密碼
為了安全性,您應將 admin 的預設密碼變更為只有您自己知道的密碼。您需要使用 imqusermgr 工具來完成此作業。
以下指令將 mybroker 代理程式實例的預設管理員密碼 admin 變更為 grandpoobah。
imqusermgr update mybroker -u admin -p grandpoobah
當代理程式實例正在執行時,您可以透過執行任一指令行工具,來快速確認此變更是否生效。例如,下列指令會提示您提供密碼:
imqcmd list svc mybroker -u admin
輸入新密碼 (grandpoobah) 即生效,輸入舊密碼即失敗。
變更密碼後,使用任一 Message Queue 管理工具 (包括管理主控台) 時,您均應提供新的密碼。
將 LDAP 伺服器用於使用者儲存庫
若要將 LDAP 伺服器用於使用者儲存庫,請執行下列工作:
編輯實例配置檔案
若要代理程式使用目錄伺服器者,請在代理程式實例配置檔案 config.properties 中設定一些特性值。這些特性可讓代理程式實例查詢 LDAP 伺服器以獲得有關使用者和群組的資訊。每當使用者嘗試連線到代理程式實例或執行某些訊息傳送作業時,代理程式就會查詢 LDAP 伺服器。
實例配置檔案在代理程式實例目錄下的目錄中。路徑格式如下:
…/instances/instanceName/props/config.properties
如需作業系統特定的實例目錄位置之詳細資訊,請參閱附錄 A「Message Queue 資料的作業系統特定位置」。
編輯配置檔案以使用 LDAP 伺服器
- 透過設定以下特性指定您要使用 LDAP 使用者儲存庫:
imq.authentication.basic.user_repository=ldap
- 設定 imq.authentication.type 特性,以確定密碼應以基本 64 編碼 (basic) 還是以 MD5 摘要 (digest) 從用戶端傳送至代理程式。當將 LDAP 目錄伺服器用於使用者儲存庫時,您必須將認證類型設定為 basic。例如,
imq.authentication.type=basic
- 您還必須設定可控制 LDAP 存取的代理程式特性。這些特性儲存在代理程式的實例配置檔案中。下一節會提供這個特性的摘要說明。
Message Queue 使用 JNDI API 與 LDAP 目錄伺服器通訊。請參閱 JNDI 文件,以獲得這些特性中所參照之語法和術語的更多相關資訊。Message Queue 會 Sun JNDI LDAP 供應商和簡單認證。
Message Queue 支援 LDAP 認證防故障備用:您可以指定用於嘗試認證的 LDAP 目錄伺服器清單 (請參閱 imq.user.repos.ldap.server 特性的參照資訊)。
如需 LDAP 使用者儲存庫相關特性的設定範例,請參閱代理程式的 config.properties 檔案。
- 如有必要,您需要編輯存取控制特性檔案中的使用者/群組和規則。如需有關使用存取控制特性檔案的更多資訊,請參閱授權使用者:存取控制特性檔案。
- 如果在連線認證和群組搜尋期間,您要讓代理程式透過 SSL 與 LDAP 目錄伺服器通訊,則需要啟動 LDAP 伺服器中的 SSL,然後在代理程式配置檔案中設定以下特性:
這些是 LDAP 的相關特性:
- imq.user_repository.ldap.server。host:port 用於 LDAP 伺服器
- imq.user_repository.ldap.principal。識別名稱,代理程式將使用此名稱連結至目錄伺服器以進行搜尋。
- imq.user_repository.ldap.password。與代理程式所用識別名稱相關聯的密碼。
- imq.user_repository.ldap.base。用於使用者項目的目錄庫。
- imq.user_repository.ldap.uidattr。供應程式特定的屬性識別碼,其值可唯一識別使用者。例如:uid、cn。
- imq.user_repository.ldap.usrfilter。用於使用者的 JNDI 搜尋篩選器。
- imq.user_repository.ldap.grpsearch。指定您是否要啟用群組搜尋的布林。
- imq.user_repository.ldap.grpbase。用於群組項目的目錄庫。
- imq.user_repository.ldap.gidattr。供應程式特定的屬性識別碼,其值為群組名稱。
- imq.user_repository.ldap.memattr。群組項目中的屬性識別碼,其值為群組成員的識別名稱。
- imq.user_repository.ldap.grpfiltler。用於群組的 JNDI 搜尋篩選器。
- imq.user_repository.ldap.timeout。指定搜尋時間限制的整數 (以秒為單位)。
- imq.user_repository.ldap.ssl.enabled。指定代理程式與 LDAP 通訊時是否應使用 SSL 協定的布林。
如需這些特性的完整參照資訊,請參閱安全性管理程式特性。
設定管理員的存取控制
若要建立管理使用者,您可以使用存取控制特性檔案,指定可以建立 ADMIN 連線的使用者和群組。這些使用者和群組必須預先在 LDAP 目錄中定義。
任何使用者或群組只要能夠建立 ADMIN 連線,即可下達管理指令。
設定管理使用者
- 將代理程式特性 imq.accesscontrol.enabled 設定為 true 預設值,啟用存取控制檔案。
imq.accesscontrol.enabled 特性可以啟用存取控制檔案。
- 開啟存取控制檔案 accesscontrol.properties。附錄 A「Message Queue 資料的作業系統特定位置」中列出此檔的位置。
檔案中包含一個項目,大致如下:
service connection access control
##################################
connection.NORMAL.allow.user=*
connection.ADMIN.allow.group=admin
列出的項目僅為範例。請注意基於檔案的使用者儲存庫中有 admin 群組,但是依預設,LDAP 目錄中沒有此群組。您必須將 LDAP 目錄中定義的群組名稱,換成要授與 Message Queue 管理員權限的群組名稱。
- 若要將 Message Queue 管理員權限授與使用者,請如下列所示,輸入使用者名稱:
connection.ADMIN.allow.user=userName[,userName2,..]
- 若要將 Message Queue 管理員權限授與群組,請如下列所示,輸入群組名稱:
connection.ADMIN.allow.group=groupName[,groupName2,..]
授權使用者:存取控制特性檔案存取控制特性檔案 (ACL 檔案) 包含的規則,指定使用者和群組使用者可以執行的作業。您可以編輯 ACL 檔案,限制某些使用者和群組執行作業。您可以在每個代理程式實例使用不同的 ACL 檔案。
當用戶端應用程式執行以下作業之一時,代理程式會檢查其 ACL 檔案:
代理程式會檢查 ACL 檔案,判斷這位提出要求的使用者或使用者所屬的群組是否已被授權執行此作業。
如果您編輯 ACL 檔案,新的設定會在下次代理程式檢查檔案驗證授權時生效。您編輯此檔案後,不需要重新啟動代理程式。
無論使用者資訊是放置在文字檔案使用者儲存庫 (請參閱使用文字檔案使用者儲存庫) 或 LDAP 使用者儲存庫 (請參閱將 LDAP 伺服器用於使用者儲存庫) 中,均可使用 ACL 檔案。
建立存取控制特性檔案
ACL 檔案為特定實例。每次啟動代理程式實例時,會在實例目錄中建立預設檔案 accesscontrol.properties。此檔案的路徑格式如下 (請參閱附錄 A「Message Queue 資料的作業系統特定位置」):
…/instances/brokerInstanceName/etc/accesscontrol.properties
ACL 檔案的格式與 Java 特性檔案的格式類似。它的開始部分定義檔案的版本,然後分三部分指定存取控制規則:
version 特性定義 ACL 特性檔案的版本;您不能變更此項目。
version=JMQFileAccessControlModel/100
以下描述存取規則的基本語法並介紹如何計算許可權,並且還描述指定存取控制的 ACL 檔案的三個部分。
存取規則的語法
在 ACL 特性檔案中,存取控制定義了特定使用者或群組對受保護的資源 (如實體目標和連線服務) 擁有何種存取權。存取控制由一條規則或一組規則表示,每條規則用一個 Java 特性表示:
這些規則的基本語法如下:
resourceType.resourceVariant.operation.access.principalType = principals
表 7-3 描述了語法規則的元素。
表 7-3 存取規則的語法元素
元素
說明
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 的使用者、群組或目標名稱,請使用 Unicode 退出 (\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 產生訊息,但允許其他所有使用者產生訊息。
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 的所有成員可以執行這項作業。
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。您只能授權存取這些連線服務類型的預定值。
預設 ACL 特性檔案授權所有使用者存取 NORMAL 連線服務,並授權 admin 群組中的使用者存取 ADMIN 連線服務:
connection.NORMAL.allow.user=*
connection.ADMIN.allow.group=admin
如果您使用基於檔案的使用者儲存庫,imqusermgr 會建立預設群組 admin。如果您使用 LDAP 使用者儲存庫,您只要執行下列一項作業即可使用預設 ACL 特性檔案:
您可以限制連線存取權限。例如,以下規則拒絕 Bob 存取 NORMAL,但是允許其他所有使用者進行存取:
connection.NORMAL.deny.user=Bob
connection.NORMAL.allow.user=*
您可以使用星號 (*) 字元來指定所有認證使用者或群組。
您使用 ACL 特性檔案授權存取 ADMIN 連線的方式,與基於檔案的使用者儲存庫和 LDAP 使用者儲存庫有下列不同:
實體 目標的存取控制
存取控制特性檔案的目標存取控制部分,包含基於實體目標的存取控制規則。這些規則確定何人 (使用者/群組) 可以在何處 (實體目標) 做什麼 (作業)。這些規則所規定的存取權類型包括:將訊息傳送至佇列、將訊息出版至主題、接收來自佇列的訊息、訂閱主題以及瀏覽佇列中的訊息。
依預設,任何使用者或群組對任何實體目標擁有所有類型的存取權。您可以新增多條特定的目標存取規則,或編輯預設規則。本節的其餘部分介紹實體目標存取規則的語法,您必須理解此語法以編寫自己的規則。
目標規則的語法如下:
resourceType.resourceVariant.operation.access.principalType = principals
表 7-4 描述了這些元素:
表 7-4 實體目標存取控制規則的元素
元件
說明
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 的服務基於安全套接層 (SSL) 標準的連線服務,可以在用戶端與代理程式之間傳送加密訊息。本節介紹如何設定基於 SSL 的連線服務。
Message Queue 支援基於安全套接層 (SSL) 標準的下列連線服務:
這些連線服務允許在用戶端和代理程式之間傳送加密訊息。Message Queue 支援基於自身簽名伺服器憑證或簽名憑證的 SSL 加密。
若要使用基於 SSL 的連線服務,您將使用鍵值工具公用程式 (imqkeytool) 產生私密密鑰/公開密鑰對。此公用程式將公開密鑰內嵌於自身簽名的憑證中,此憑證被傳送至請求與代理程式連線的用戶端,此用戶端使用此憑證設定加密連線。
雖然 Message Queue 的基於 SSL 的連線服務在概念上相似,但是在設定方法上卻有些差異。
本節還介紹透過 TCP/IP 的安全連線。
使用者透過 HTTP 基於 SSL 的連線服務 httpsjms,能讓用戶端和代理程式使用 HTTPS 通道 Servlet,建立安全連線。如需透過 HTTP 設定安全連線的詳細資訊,請參閱附錄 C「HTTP/HTTPS 支援」。
TCP/IP 的安全連線服務
下列基於 SSL 的連線服務可提供透過 TCP/IP 的直接且安全的連線:
- ssljms 在用戶端與代理程式之間,透過安全且加密的連線傳送訊息。
- ssladmin 服務在 Message Queue 指令公用程式 (imqcmd) 和代理程式之間,建立安全且加密的連線。管理主控台(imqadmin) 不支援安全連線。
- cluster 服務傳送訊息,並且在叢集中的代理程式之間,透過安全的加密連線,提供代理程式互通通訊 (請參閱代理程式之間的安全連線)。
配置使用自身簽名的憑證
本節描述如何使用自身簽名的憑證,設定基於 SSL 的服務。
若要提高認證層級,您可以使用認證機構驗證的簽名憑證。請先遵循本節中的步驟,再到配置使用簽名的憑證執行其他步驟。
設定基於 SSL 的連線服務除步驟 4 (配置並執行用戶端) 之外,設定 ssljms 和 ssladmin 連線服務的程序是相同的。
以下各節較詳細地說明每個步驟。
步驟 1. 產生自身簽名的憑證
Message Queue 在假設用戶端正與已知且可信任的伺服器通訊的情況下,SSL 支援搭配自身簽名的憑證,可保護線上資料。
執行 imqkeytool 指令,以便為代理程式產生自身簽名的憑證。在 UNIX® 系統上,為了擁有建立密鑰儲存的許可權,您可能需要以超級使用者 (root) 的身份執行 imqkeytool。
同樣的憑證可以用於 ssljms、ssladmin 或 cluster連線服務。
在命令提示字元下輸入以下內容:
imqkeytool -broker
公用程式會提示您輸入密鑰儲存密碼。
代理程式正在產生密鑰儲存 ...
輸入密鑰儲存密碼:接著,公用程式會提示您輸入憑證所屬代理程式的識別資訊。您提供的資訊會製成 X.500 識別名稱。下表為每個提示列出提示及其說明和範例。這些值不區分大小寫,而且可以包含空格。
表 7-5 自身簽名的憑證需要的識別名稱資訊
提示
說明
範例
您的姓名是?
X.500 commonName (CN)。請輸入執行代理程式伺服器完全合格的名稱。
myhost.sun.com
您的組織單位名稱是什麼?
X.500 organizationalUnit (OU)。請輸入部門或事業單位名稱。
purchasing
您的組織名稱是什麼?
X.500 organizationName (ON)。較大的組織名稱,例如公司或政府實體。
My Company, Inc.
您的城市或所在地名稱是什麼?
X.500 localityName (L)。
San Francisco
您的州或省名稱是什麼?
X.500 stateName (ST)。請輸入州或省的名稱,不使用縮寫。
California
這個單位的兩個字母的國碼是什麼?
X.500 country (C)。
US
輸入完畢後,imqkeytool 會顯示您輸入的資訊,請您確認。例如:
Is CN=mqserver.sun.com, OU=purchasing, O=My Company, Inc., L=San Francisco, ST=California, C=US correct?
若要重新輸入這些值,請接受預設值或輸入 no;若要接受現行值並繼續執行,請輸入 yes。您確認後,imqkeytool 會在產生鍵對時暫停。
接著,imqkeytool 會要求您提供密碼,以鎖定特定的鍵對 (鍵密碼)。請對此提示按 Return 鍵,表示鍵密碼和密鑰儲存密碼相同。
備註
請記住您提供的密碼。您啟動代理程式時必須提供這個密碼,代理程式才能開啟密鑰儲存。您可以將密鑰儲存密碼儲存在密碼檔案中 (請參閱使用密碼檔案)。
執行 imqkeytool 可執行 JDK keytool 公用程式,以產生自身簽名的憑證,並將其放在 Message Queue 密鑰儲存中,且如附錄 A「Message Queue 資料的作業系統特定位置」中所示,其目錄位置因作業系統而異。
此密鑰儲存的格式與 JDK1.2 keytool 公用程式支援的格式相同。
這些是 Message Queue 密鑰儲存的可配置特性:
- imq.keystore.file.dirpath。用於基於 SSL 的服務:指定包含密鑰儲存檔案之目錄的路徑。如需預設值,請參閱附錄 A「Message Queue 資料的作業系統特定位置」
- imq.keystore.file.name。用於基於 SSL 的服務:指定密鑰儲存檔案的名稱。
- imq.keystore.password。用於基於 SSL 的服務:指定密鑰儲存密碼。
您可能需要重新產生鍵對以解決某些問題;例如:
可能導致此異常的原因為,您提供的鍵密碼與您在步驟 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
請輸入密鑰儲存密碼:mypassword- 將密碼放在密碼檔案中,請參閱使用密碼檔案中的描述。您將密碼放在密碼檔案中並且設定特性為 imq.passfile.enabled=true 後,請執行下列其中一項操作:
當您啟動具有 SSL 的代理程式或用戶端時,您可能會注意到它消耗了很多 CPU 週期,長達幾秒鐘。這是因為 Message Queue 使用 JSSE (Java 安全套接延伸) 以實作 SSL。JSSE 使用 java.security.SecureRandom() 產生隨機數字。此方法建立初始隨機數種子要佔用大量時間,這就是您所看到 CPU 使用率增加的原因。建立種子之後,CPU 使用率會降至正常。
步驟 4. 配置並執行基於 SSL 的用戶端
最後,請將用戶端配置為使用安全連線服務。TCP/IP 上有兩種安全連線情形:
這兩種用戶端將在以下各節中分別描述。
應用程式用戶端使用 ssljms
您必須確保用戶端在其類別路徑中擁有必要的安全套接延伸 (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 Developer’s Guide for Java Clients 中有關使用受管理物件的章節。
管理用戶端 (imqcmd) 使用 ssladmin
您可以透過使用 imqcmd 時包括的 -secure 選項,建立安全管理連線。例如:
imqcmd list svc -b hostName:port -u adminName -secure
其中 adminName 是 Message Queue 使用者儲存庫中的有效項目,指令會提示您輸入密碼。(如果您是使用文字檔案儲存庫,請參閱變更預設管理員密碼)。
列出連線服務是顯示 ssladmin 服務正在執行的一種方法,也是您可以成功建立安全 admin 連線的一種方法,如以下輸出中所示:
Listing all the services on the broker specified by:
主機 主要連接埠
localhost 7676
服務名稱 連接埠號 服務狀態
admin 33984 (動態) 執行中
httpjms - 未知
httpsjms - 未知
jms 33983 (動態) 執行中
ssladmin 35988 (動態) 執行中
ssljms 動態 未知
成功列出服務。
配置使用簽名的憑證
簽名憑證提供的伺服器認證層級,高於自身簽名憑證的伺服器認證層級。若要實作簽名的憑證,請在密鑰儲存中安裝簽名的憑證,然後配置 Message Queue 用戶端在與 imqbrokerd 建立 SSL 連線時要求簽名的憑證。
您只能在用戶端和代理程式之間 (不能在叢集的多個代理程式之間) 實作簽名的憑證。
以下的指示是假設您已完成在配置使用自身簽名的憑證文件中的步驟。當您遵循指示時,存取 http://java.sun.com 上有關 J2SE keytool 和 X.509 憑證的資訊可能有所幫助。
步驟 1:取得並安裝簽名的憑證
若要取得簽名的憑證
若要安裝簽名的憑證
- 檢查 $JAVA_HOME/lib/security/cacerts,查看 J2SE 是否如下所示,預設支援 CA:
keytool -v -list -keystore $JAVA_HOME/lib/security/cacerts
指令列出系統密鑰儲存中的根 CA。
如果有列出您的 CA,請跳過下一個步驟。
- 如果 J2SE 未支援您的 CA,請將認證機構的根憑證匯入 imqbrokerd 密鑰儲存中。
範例:
keytool -import -alias ca -file ca.cer -noprompt -trustcacerts
-keystore /etc/imq/keystore -storepass myStorePasswordca.cer 值是來自 CA 的 CA 根憑證。
如果您使用 CA 測試憑證,可能需要匯入「測試 CA 根」憑證。您的 CA 應該會指示如何取得「測試 CA 根」憑證。
- 將簽名的憑證匯入密鑰儲存中,取代原來的自身簽名的憑證。
例如:
keytool -import -alias imq -file broker.cer -noprompt -trustcacerts
-keystore /etc/imq/keystore -storepass myStorePasswordbroker.cer 值是您取自 CA 簽名的憑證所在的檔案。
現在 imqbrokerd 密鑰儲存有簽名的憑證可用於 SSL 連線。
步驟 2:配置用戶端執行階段以請求簽名的憑證
配置 Java 用戶端執行階段依預設,Message Queue 用戶端執行階段信任 imqbrokerd,並接受任何呈上的憑證。現在您必須配置用戶端執行階段以請求簽名的憑證,並確保用戶端信任簽署憑證的 CA。
- 若要配置用戶端向 imqbrokerd 請求有效簽名的憑證,請將用戶端 ConnectionFactory 物件的 imqSSLIsHostTrusted 屬性設定為 false。
- 請如步驟 4. 配置並執行基於 SSL 的用戶端所描述,嘗試與 imqbrokrd 建立 SSL 連線。
如果 broker 的憑證是由知名的 CA 簽署,可能會連線成功,您可以跳過下一個步驟。如果連線失敗出現憑證驗證錯誤,請執行下一個步驟。
- 請如下面幾節所描述,在用戶端的信任儲存中安裝負責簽名的 CA 根憑證。
配置有信任儲存的用戶端時,有三個選項:
下面幾節中有如何使用這些選項來安裝「Verisign 測試根 CA」的範例。根 CA 在 testrootca.cer 檔案中。這些範例假設 J2SE 安裝在 /usr/j2se 中。
安裝到預設系統 cacerts 檔案中
這個範例將根 CA 安裝到 $JAVA_HOME/usr/jre/lib/security/cacerts 檔案中。
keytool -import -keystore /usr/j2se/jre/lib/security/cacerts
-alias VerisignTestCA -file testrootca.cer -noprompt -trustcacerts -storepass myStorePassword依預設,用戶端會搜尋這個密鑰儲存,因此不需要進一步配置用戶端。
安裝到 jssecacerts 中
這個範例將根 CA 安裝到 $JAVA_HOME/usr/jre/lib/security/jssecacerts 檔案中。
keytool -import -keystore /usr/j2se/jre/lib/security/jssecacerts
-alias VerisignTestCA -file testrootca.cer -noprompt
-trustcacerts -storepass myStorePassword依預設,用戶端會搜尋這個密鑰儲存,因此不需要進一步配置用戶端。
安裝到其他檔案中
這個範例將根 CA 安裝到 /home/smith/.keystore 檔案中。
keytool -import -keystore /home/smith/.keystore
-alias VerisignTestCA -file testrootca.cer -noprompt -trustcacerts -storepass myStorePassword依預設,用戶端不搜尋這個密鑰儲存,因此您必須為用戶端提供信任儲存的位置。若要執行這項操作,請在用戶端執行時,設定 javax.net.ssl.trustStore Java 系統的特性。例如:
javax.net.ssl.trustStore=/home/smith/.keystore
使用密碼檔案有些類型的指令需要密碼。表 7-6 中的第一欄列出需要密碼的指令,第二欄列出需要密碼的原因。
表 7-6 使用密碼的指令
指令
用途
密碼的用途
imqbrokerd
啟動代理程式
存取外掛持續性資料儲存、SSL 憑證密鑰儲存或 LDAP 使用者儲存庫
imqcmd
管理代理程式
認證已授權使用指令之管理使用者
imqdbmgr
管理外掛資料儲存
存取資料儲存
您可以在密碼檔案 (passfile) 中指定這些密碼,並且使用 -passfile 選項來指定檔案名稱。下面是 -passfile 選項的格式:
imqbrokerd -passfile myPassfile
備註
您可以在舊版的指令行中使用 -p、-password、-dbpassword 和 -ldappassword 選項來指定密碼。但是這些選項已經被停用,將從未來的版本中移除。本版指令行中這些選項的任一值,會停用密碼檔案中的相關值。
安全考量
除非別人可以看到您的監視器,否則遵照提示來指定密碼是最安全的指定密碼方法。您也可以從指令行指定密碼檔案。但若使用非互動式指令,就必須使用密碼檔案。
密碼檔案沒有加密,您必須設定許可權,防止無權限者存取。設定許可權時請限制使用者檢視檔案,但是允許啟動代理程式的使用者讀取此檔。
密碼檔案的內容
密碼檔案是純文字檔,包含一組特性和值。每一個值是指令使用的密碼。
密碼檔案可以包含表 7-7 中所示的密碼:
表 7-7 密碼檔案中的密碼
密碼
影響的指令
說明
imq.imqcmd.password
imqcmd
指定 imqcmd 指令行的管理員密碼。每個指令都會認證此密碼。
imq.keystore.password
imqbrokerd
為基於 SSL 的服務指定密鑰儲存密碼。
imq.persist.jdbc.password
imqbrokerd
imdbmgr
如果必需,則指定用於開啟資料庫連線的密碼。
imq.user_repository.ldap.password
imqbrokerd
指定與識別名稱相關聯的密碼,此識別名稱指定給代理程式以連結至已配置的 LDAP 使用者儲存庫。
Message Queue 產品有提供密碼檔案範例。有關此範例檔案的位置,請參閱附錄 A「Message Queue 資料的作業系統特定位置」。
建立稽核記錄Message Queue 僅 Enterprise Edition 支援稽核記錄。啟用稽核記錄後,Message Queue 會記錄下列類型的事件:
若要將稽核記錄在 Message Queue 代理程式記錄檔中,請將 imq.audit.enabled 代理程式特性設定為 true。記錄檔中的所有稽核記錄都有關鍵字 AUDIT。
如需 imq.audit.enabled 特性的參照資訊,請參閱安全性管理程式特性。