Sun Java System Message Queue 3.7 UR1 管理指南

第 7 章 管理安全性

您可透過下列方式管理安全性:配置使用者儲存庫以對使用者進行認證、定義存取控制、配置安全通訊端層 (SSL) 連線服務以對用戶端與代理程式間的通訊進行加密,以及設定用於啟動代理程式的密碼檔案。

本章包含下列各節:

使用者認證

當使用者嘗試連線至代理程式時,此代理程式將檢查使用者提供的名稱和密碼,以便進行認證。如果名稱和密碼與配置每個代理程式要參考的特定代理程式使用者儲存庫中的名稱和密碼相符,則代理程式承認此連線。

您負責維護使用者儲存庫中的使用者清單、使用者群組清單以及使用者密碼清單。您可以在每個代理程式實例使用不同的使用者儲存庫。本節介紹如何建立、寫入和管理儲存庫。

儲存庫可能是下列任一類型:

使用平面檔案使用者儲存庫

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

建立使用者儲存庫

平面檔案使用者儲存庫是針對實例的。您啟動的每個代理程式實例,都會自動建立預設的使用者儲存庫 (稱為 passwd)。此使用者儲存庫的所在目錄名稱,與此儲存庫相關聯之代理程式實例名稱相同 (請參閱附錄 AMessage QueueTM 資料的特定平台位置):

   …/instances/instanceName/etc/passwd

此儲存庫在建立時就有兩個項目。表 7–1 的每一列表示一個項目。

表 7–1 使用者儲存庫中的初始項目

使用者名稱 

密碼 

群組 

狀態 

admin

admin

admin

active

guest

guest

anonymous

active

這些初始項目可讓 Message Queue 代理程式在安裝之後立即使用,而無需管理員的介入:

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

使用者管理員公用程式

Message Queue 使用者管理員公用程式 (imqusermgr) 可讓您編輯或寫入平面檔案使用者儲存庫。本節介紹使用者管理員公用程式。後續各節介紹如何使用 imqusermgr 子指令完成特定的工作。

如需 imqusermgr 指令的完整參考資訊,請參閱第 13 章, 指令行參照

操作使用者管理員之前,請注意以下事項:


備註 –

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


子指令

imqusermgr 指令有子指令 adddeletelistupdate

指令選項

表 7–2 列出了 imqusermgr 指令的選項。

表 7–2 imqusermgr 選項

選項 

說明 

-a activeState

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

-f

未經使用者確認即執行動作。 

-h

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

-i instanceName

指定要套用指令的代理程式實例名稱。如果未指定,則使用預設實例名稱 imqbroker

-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 的密碼變更為 aladdin

imqusermgr update -u Katharine -p aladdin

若要列出有關一個或所有使用者的資訊,請使用 list 指令。以下指令顯示名為 isa 的使用者之相關資訊:

imqusermgr list -u isa

% imqusermgr list -u isa

User repository for broker instance: imqbroker
----------------------------------
User Name    Group    Active State
----------------------------------
isa          admin    true

以下指令列出所有使用者的相關資訊:

imqusermgr list

% imqusermgr list

User repository for broker instance: imqbroker
--------------------------------------
User Name    Group        Active State
--------------------------------------
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 的預設密碼變更為只有您自己知道的密碼。以下指令將 mybroker 代理程式實例的預設管理員密碼 admin 變更為 grandpoobah

imqusermgr update mybroker -u admin -p grandpoobah

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

imqcmd list svc mybroker -u admin

輸入新密碼 (grandpoobah) 即生效,輸入舊密碼即失敗。

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

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

若要將 LDAP 伺服器用於使用者儲存庫,請執行下列工作:

編輯實例配置檔案

若要代理程式使用目錄伺服器者,請在代理程式實例配置檔案 config.properties 中設定一些特性值。當使用者嘗試連線至代理程式實例或執行訊息傳送作業時,這些特性可讓代理程式實例查詢 LDAP 伺服器,以取得使用者和群組的相關資訊。

實例配置檔案位於代理程式實例目錄下的目錄中。路徑格式如下:

/instances/instanceName

/props/config.properties

如需作業系統專用的實例目錄位置之詳細資訊,請參閱附錄 AMessage QueueTM 資料的特定平台位置

Procedure編輯配置檔案以使用 LDAP 伺服器

  1. 透過設定以下特性,以指定您要使用 LDAP 使用者儲存庫:


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


    imq.authentication.type=basic
  3. 您還必須設定可控制 LDAP 存取的代理程式特性。這些特性儲存在代理程式的實例配置檔案中。安全性服務中討論這些特性,安全性特性中也有摘要。

    Message Queue 使用 JNDI API 與 LDAP 目錄伺服器通訊。如需這些特性中所參考之語法和專有名詞的更多資訊,請參閱 JNDI 文件。Message Queue 使用 Sun JNDI LDAP 提供者和簡單認證。

    Message Queue 支援 LDAP 認證容錯移轉:您可以指定在進行認證時嘗試使用的 LDAP 目錄伺服器之清單 (請參閱 imq.user.repos.ldap.server 特性的參考資訊)。

    如需 LDAP 使用者儲存庫相關特性的設定範例,請參閱代理程式的 config.properties 檔案。

  4. 如有必要,您需要編輯存取控制特性檔案中的使用者/群組和規則。如需使用存取控制特性檔案的更多資訊,請參閱使用者授權:存取控制特性檔案

  5. 如果在連線認證和群組搜尋期間,您要讓代理程式透過 SSL 與 LDAP 目錄伺服器通訊,則需要啟動 LDAP 伺服器中的 SSL,然後在代理程式配置檔案中設定以下特性:

    • 指定 LDAP 伺服器用於 SSL 通訊的連接埠。例如:


      imq.user_repository.ldap.server=myhost:7878
    • 將代理程式特性 imq.user_repository.ldap.ssl.enabled 設為 true

      部署多台 LDAP 目錄伺服器時,請使用 ldap:// 指定其他每一台目錄伺服器。例如:

      imq.user_repository.ldap.server = myHost:7878 ldap:// otherHost:7878

      以空格分隔每一台目錄伺服器。清單中的所有目錄伺服器必須使用相同的值,以供其他與 LDAP 相關的特性使用。

設定管理員的存取控制

若要建立管理使用者,您可以使用存取控制特性檔案,指定可以建立 ADMIN 連線的使用者和群組。這些使用者和群組必須預先在 LDAP 目錄中定義。

任何使用者或群組只要能夠建立 ADMIN 連線,即可下達管理指令。

Procedure設定管理使用者

  1. 將代理程式特性 imq.accesscontrol.enabled 設定為 true 預設值,啟用存取控制檔案。

    imq.accesscontrol.enabled 特性可以啟用存取控制檔案。

  2. 開啟存取控制檔案 accesscontrol.properties附錄 AMessage QueueTM 資料的特定平台位置 中會列出此檔案的位置。

    此檔案包含一個項目,如下所示:

    service connection access control##################################connection.NORMAL.allow.user=*connection.ADMIN.allow.group=admin

    列出的項目僅為範例。請注意檔案式使用者儲存庫中有 admin 群組,但是依預設,LDAP 目錄中沒有此群組。您必須將 LDAP 目錄中已定義的群組名稱,替換為要授予 Message Queue 管理員權限的群組名稱。

  3. 若要將 Message Queue 管理員權限授予使用者,請如下所示,輸入使用者名稱:

    connection.ADMIN.allow.user= userName[[,userName2] ]

  4. 若要將 Message Queue 管理員權限授予群組,請如下所示,輸入群組名稱:

    connection.ADMIN.allow.group= groupName[[,groupName2] ]

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

存取控制特性檔案 (ACL 檔案) 包含的規則,指定使用者和群組使用者可以執行的作業。您可以編輯 ACL 檔案,限制某些使用者和群組執行作業。您可以在每個代理程式實例使用不同的 ACL 檔案。

無論使用者資訊放在平面檔案使用者儲存庫中還是放在 LDAP 使用者儲存庫中,均可使用 ACL 檔案。當用戶端應用程式執行以下作業時,代理程式會檢查其 ACL 檔案:

代理程式會檢查 ACL 檔案,判斷提出請求的使用者或該使用者所屬的群組,是否已有執行此作業的授權。

如果您編輯 ACL 檔案,新的設定會在下次代理程式檢查檔案以驗證授權時生效。您編輯此檔案後,不需要重新啟動代理程式。

建立存取控制特性檔案

不同實例有不同的 ACL 檔案。每次啟動代理程式實例時,會在實例目錄中建立預設檔案 accesscontrol.properties。此檔案的路徑格式如下 (請參閱附錄 AMessage QueueTM 資料的特定平台位置):

…/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

下列其中一項:connectionqueue topic

resourceVariant

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

operation

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

access

下列其中一項:allowdeny

principalType

下列其中一項:usergroup。如需更多資訊,請參閱群組

principals

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

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


備註 –

若要指定非 ASCII 的使用者、群組或目標名稱,請使用 Unicode 換碼 (\\uXXXX) 表示法。如果您已經編輯並儲存具有非 ASCII 編碼名稱的 ACL 檔案,則可以使用 Java native2ascii 工具將其轉換為 ASCII。如需更多詳細資訊,請至

http://java.sun.com/j2se/1.4/docs/guide/intl/faq.html

如何計算權限

檔案中有多個存取規則時,權限計算如下:

連線服務的存取控制

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

connection.resourceVariant.
access.principalType=
principals

resourceVariant 定義有兩個值:NORMALADMIN。您只能授權存取這些連線服務類型的預定值。

預設 ACL 特性檔案授權所有使用者存取 NORMAL 連線服務,並授權 admin 群組中的使用者存取 ADMIN 連線服務:

connection.NORMAL.allow.user=*
connection.ADMIN.allow.group=admin

如果您使用檔案式的使用者儲存庫,使用者管理員公用程式會建立預設群組 admin。如果您使用 LDAP 使用者儲存庫,只要執行下列一項作業即可使用預設 ACL 特性檔案:

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

connection.NORMAL.deny.user=Bob
connection.NORMAL.allow.user=*

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

對於檔案式使用者儲存庫和 LDAP 使用者儲存庫,使用 ACL 特性檔案授權存取 ADMIN 連線的方式有下列不同:

實體目標的存取控制

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

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

目標規則的語法如下:

resourceType.resourceVariant.operation.access.principalType=principals

表 7–4 中有這些元素的描述:

表 7–4 實體目標存取控制規則的元素

元件 

說明 

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 型連線服務:

本節後續部分說明如何使用 ssljmsssladmincluster 連線服務,透過 TCP/IP 設定安全連線。如需有關使用 httpsjms 服務,透過 HTTP 設定安全連線的詳細資訊,請參閱附錄 CHTTP/HTTPS 支援

使用自我簽署的憑證

若要透過 TCP/IP 使用 SSL 型連線服務,您必須使用金鑰工具公用程式 (imqkeytool) 產生公開/私密金鑰對。此公用程式將公開金鑰內嵌於自我簽署的憑證中,此憑證將傳送至請求與代理程式連線的用戶端,此用戶端使用此憑證設定加密連線。本節描述如何使用此類自我簽署的憑證,設定 SSL 型服務。

若要提高認證層級,您可以使用憑證授權單位驗證的簽署憑證。相較於自我簽署的憑證,使用簽署憑證需要更多必要步驟。您必須先執行本節所述的步驟,接著執行使用簽署的憑證中的額外步驟。

Message Queue 支援具有自我簽署憑證的 SSL,會認為用戶端正與已知並可信任的伺服器通訊,而保護所傳送的資料。下列程序說明使用自我簽署的憑證設定 SSL 型連線服務的必要步驟。後續小節會詳細說明每個步驟。

Procedure使用自我簽署的憑證設定 SSL 型連線服務

  1. 產生自我簽署的憑證。

  2. 啟用代理程式中的 ssljmsssladmincluster 連線服務。

  3. 啟動代理程式。

  4. 配置並執行用戶端。

    這個步驟僅適用於 ssljms 連線服務,不適用於 ssladmincluster

產生自我簽署的憑證

執行金鑰工具公用程式 (imqkeytool),為代理程式產生自我簽署的憑證。(在 UNIX® 系統上,需要以超級使用者 (root) 的身份執行此公用程式,才擁有建立金鑰庫的權限。)相同的憑證可用於 ssljmsssladmincluster 連線服務。

在指令提示符號下輸入以下內容:

imqkeytool -broker

金鑰工具公用程式會提示您輸入金鑰庫密碼。

   Generating keystore for the broker ...
   Enter keystore password:

接著,公用程式會提示您輸入憑證所屬代理程式的識別資訊。您提供的資訊會組成 X.500 辨別名稱。表 7–5 顯示提示以及提供給每個提示的值。這些值不區分大小寫,而且可以包含空格。

表 7–5 自我簽署憑證所需之識別名稱資訊

提示 

X.500 屬性 

說明 

範例 

What is your first and last name?

commonName (CN)

執行代理程式的伺服器之完全合格的名稱 

mqserver.sun.com

What is the name of your organizational unit?

organizationalUnit (OU)

部門名稱 

purchasing

What is the name of your organization?

organizationName (ON)

較大的組織名稱,例如公司或政府實體。 

My Company, Inc.

What is the name of your city or locality?

localityName (L)

城市或所在地名稱 

San Francisco

What is the name of your state or province?

stateName (ST)

州或省的全名 (不使用縮寫) 

California

What is the two-letter country code for this unit?

country (C)

標準的雙字母國家代碼 

US

輸入完畢後,金鑰工具公用程式會顯示您輸入的資訊,請您確認。例如:

   Is CN=mqserver.sun.com, OU=purchasing, ON=My Company, Inc.,
   L=San Francisco, ST=California, C=US correct?

若要接受目前的值並繼續執行,請輸入 yes;若要重新輸入這些值,請接受預設值或輸入 no。您確認後,此公用程式會產生金鑰對並暫停其他作業。

接著,公用程式會要求您提供用於鎖定金鑰對的密碼 (即金鑰密碼)。看到此提示請按下 Return 鍵,表示金鑰密碼與金鑰庫密碼相同。


備註 –

請記住您指定的密碼。啟動代理程式時必須提供此密碼,代理程式才能開啟金鑰庫。您可以在密碼檔案中儲存金鑰庫密碼 (請參閱密碼檔案)。


金鑰工具公用程式會產生自我簽署的憑證,並將其放置在 Message Queue 的金鑰庫中。金鑰庫所在目錄取決於作業系統,請參閱附錄 AMessage QueueTM 資料的特定平台位置

以下是 SSL 型連線服務之 Message Queue 金鑰庫的可配置特性:

有時您可能需要重新產生金鑰對,以解決某些問題:例如,您忘記了金鑰庫密碼,或者啟動代理程式時, SSL 型服務無法初始化,並且您遇到以下異常:

java.security.UnrecoverableKeyException:Cannot recover key

(如果在產生自我簽署的憑證時,所提供的金鑰密碼與金鑰庫密碼不同,則可能導致此異常。)

Procedure重新產生金鑰對

  1. 移除代理程式的金鑰庫,其位置如附錄 AMessage QueueTM 資料的特定平台位置中所示。

  2. 重新執行 imqkeytool 以產生新的金鑰對,如上所述。

啟用 SSL 型連線服務

若要在代理程式中啟用 SSL 型連線服務,您需要將 ssljms (或 ssladmin) 增加到 imq.service.activelist 特性。

Procedure在代理程式中啟用 SSL 型服務

  1. 開啟代理程式的實例配置檔案。

    實例配置檔案的所在目錄名稱,與此配置檔案相關聯之代理程式實例名稱 (instanceName) 相同 (請參閱附錄 AMessage QueueTM 資料的特定平台位置):

       .../instances/instanceName/props/config.properties
    
  2. 增加表示 imq.service.activelist 特性的項目 (如果項目尚未存在),並將所需的 SSL 型服務納入清單。

    依預設,此特性包括 jmsadmin 連線服務。增加 SSL 型服務或您要啟動的服務 (ssljmsssladmin,或兩者):

    imq.service.activelist=jms,admin,ssljms,ssladmin
    

    備註 –

    請使用 imq.cluster.transport 特性啟用 SSL 型 cluster 連線服務,而非使用 imq.service.activelist 特性;請參閱連線代理程式


  3. 儲存並關閉實例配置檔案。

啟動代理程式

啟動代理程式,提供金鑰庫密碼。您可以透過以下任何一種方法提供密碼:


備註 –

啟動使用 SSL 的代理程式或用戶端時,CPU 使用率可能在幾秒鍾內劇增。這是因為 Message Queue 使用 JSSE (Java Secure Socket Extension) 方法 java.security.SecureRandom 產生隨機數字,此方法建立初始隨機數種子要佔用大量時間。建立種子之後,CPU 使用率會降至正常。


配置並執行 SSL 型用戶端

將用戶端配置為使用 SSL 型連線服務的程序, 根據其為應用程式用戶端 (使用 ssljms 連線服務) 還是 Message Queue 管理用戶端 (例如使用 ssladmin 連線服務的 imqcmd) 而有所不同。

應用程式用戶端

針對應用程式用戶端,您必須確保用戶端在其 CLASSPATH 變數中已指定下列 .jar 檔案:

如果您使用 1.4 版之前的 Java 2 Software Development Kit (J2SDK),也必須包含下列 Java Secure Socket Extension (JSSE) 和 Java Naming and Directory Interface (JNDI) .jar 檔案:

(如果您使用 J2SDK 1.4 或更新版本,因為已內建 JSSE 和 JNDI 支援,則不需要包含這些檔案。)

正確指定 CLASSPATH 檔案後,請啟動用戶端並將其連線至代理程式的 ssljms 連線服務,完成此作業的方法之一是輸入以下指令:

java -DimqConnectionType=TLS clientAppName

如此可告知連線使用 SSL 型連線服務。

管理用戶端

針對管理用戶端,您可以透過在呼叫 imqcmd 指令時加入 -secure 選項,來建立安全連線:例如:

imqcmd list svc -b hostName:portNumber -u adminName -secure

其中 adminName 是 Message Queue 使用者儲存庫中的有效項目。此指令會提示您輸入密碼。(如果您使用平面檔案儲存庫,請參閱變更預設管理員密碼)。

列出連線服務是驗證 ssladmin 服務正在執行的一種方法,也可以驗證是否能成功建立安全的管理連線,如下所示:


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.

使用簽署的憑證

簽署憑證提供的伺服器認證,比自我簽署憑證的伺服器認證更安全。您只能在用戶端和代理程式之間 (不能在叢集的多個代理程式之間) 實作簽署憑證。除了上述配置自我簽署憑證所需步驟之外,您還需要執行下列額外的步驟。後續小節會詳細說明這些步驟。

Procedure使用簽署的憑證

  1. 在金鑰庫中安裝憑證。

  2. 配置 Message Queue 用戶端在建立與代理程式的 SSL 型連線時,請求簽署憑證。

取得並安裝簽署的憑證

下列程序說明如何取得並安裝簽署的憑證。

Procedure取得簽署的憑證

  1. 使用 J2SE keytool 指令,為您在上節中產生的自我簽署憑證,產生憑證簽署請求 (CSR)。

    下列網站提供有關 keytool 指令的資訊:

    http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/keytool.html

    範例:


    keytool -certreq -keyalg RSA -alias imq -file certreq.csr
            -keystore /etc/imq/keystore -storepass myStorePassword

    這會產生 CSR,將憑證封裝在指定的檔案中 (此範例中的 certreq.csr )。

  2. 使用 CSR 產生或請求簽署的憑證。

    您可以使用下列方法之一:

    • 請 Thawte 或 Verisign 等知名的憑證授權單位 (CA) 簽署憑證。如需如何執行此作業的詳細資訊,請參閱您的 CA 文件。

    • 使用 SSL 簽署套裝軟體,自行簽署憑證。

      簽出的憑證是一串 ASCII 字元。如果您收到 CA 簽署的憑證,它可能是一個電子郵件附件或是郵件中的文字。

  3. 將簽署的憑證儲存在檔案中。

    以下說明中,使用 broker.cer 範例名稱來代表代理程式憑證。

Procedure安裝簽署的憑證

  1. 檢查 J2SE 依預設是否支援您的憑證授權單位。

    以下指令會列出系統金鑰庫中的根 CA:

    keytool -v -list -keystore $JAVA_HOME/lib/security/cacerts
    

    如果有列出您的 CA,請跳過下一個步驟。

  2. 如果 J2SE 未支援您的憑證授權單位,請將 CA 的根憑證匯入 Message Queue 金鑰庫中。

    範例:

    keytool -import -alias ca -file ca.cer -noprompt -trustcacerts
            -keystore /etc/imq/keystore -storepass myStorePassword
    

    其中 ca.cer 檔案包含 CA 提供的根憑證。

    如果您使用 CA 測試憑證,可能需要匯入測試 CA 根憑證。您的 CA 應該會指示如何取得該憑證的副本。

  3. 將簽署的憑證匯入金鑰庫中,替代原始的自我簽署憑證。

    範例:

    keytool -import -alias imq -file broker.cer -noprompt -trustcacerts
            -keystore /etc/imq/keystore -storepass myStorePassword
    

    broker.cer 是您從 CA 獲得的簽署憑證所在的檔案。

    現在 Message Queue 金鑰庫包含簽署憑證,可用於 SSL 連線。

配置 Message Queue 用戶端執行階段以請求簽署憑證

現在您必須配置 Message Queue 用戶端執行階段以請求簽署的憑證,並確保用戶端信任簽署此憑證的憑證授權單位。

Procedure配置用戶端執行階段以請求簽署的憑證

  1. 將連線工廠的 imqSSLIsHostTrusted 屬性設定為 false

    依預設,用戶端將用來建立代理程式連線的連線工廠物件之 imqSSLIsHostTrusted 屬性設定為 true,這表示用戶端執行階段會接受所出示的任何憑證。您必須將此值變更為 false,讓用戶端執行階段嘗試驗證所出示的所有憑證。如果憑證簽署者未出現在用戶端的信任清單存放區,驗證便會失敗。

  2. 驗證簽署的授權單位是否已在用戶端的信任清單存放區中註冊。

    若要測試用戶端是否會接受您的憑證授權單位所簽署的憑證,請嘗試建立 SSL 連線,如上節配置並執行 SSL 型用戶端中所述。如果 CA 列在用戶端的信任存放區中,連線便會成功,您可以跳過下一個步驟。如果連線失敗出現憑證驗證錯誤,請執行下一個步驟。

  3. 在用戶端的信任存放區中安裝簽署 CA 的根憑證。

    依預設,用戶端會搜尋金鑰庫檔案 cacertsjssecacerts,因此如果憑證安裝在以上其中一個檔案中,便不需要進一步配置。下列範例會將來自 Verisign 憑證授權單位,檔名為 testrootca.cer 的測試根憑證檔案,安裝到預設系統憑證檔案 cacerts 。此範例假設 J2SE 安裝在 $JAVA_HOME/usr/j2se 目錄中:

    keytool -import -keystore /usr/j2se/jre/lib/security/cacerts
            -alias VerisignTestCA -file testrootca.cer -noprompt
            -trustcacerts -storepass myStorePassword
    

    建議使用的替代選項,是將根憑證安裝到替代系統憑證檔案 jssecacerts

    keytool -import -keystore /usr/j2se/jre/lib/security/jssecacerts
            -alias VerisignTestCA -file testrootca.cer -noprompt
            -trustcacerts -storepass myStorePassword
    

    第三個可能方法是將根憑證安裝到其他金鑰庫檔案中,並且配置用戶端將其視為信任存放區。下列範例會安裝到 /home/smith/.keystore 檔案中:

    keytool -import -keystore /home/smith/.keystore
            -alias VerisignTestCA -file testrootca.cer -noprompt
            -trustcacerts -storepass myStorePassword
    

    由於用戶端依預設不會搜尋此金鑰庫,因此您必須明確向用戶端提供此位置作為信任存放區。若要執行這項操作,請在用戶端執行時,設定 Java 系統特性 javax.net.ssl.trustStore

    javax.net.ssl.trustStore=/home/smith/.keystore
    

密碼檔案

有些類型的指令需要密碼。表 7–6 中的第一欄列出需要密碼的指令,第二欄列出需要密碼的原因。

表 7–6 使用密碼的指令

指令 

用途 

密碼的用途 

imqbrokerd

啟動代理程式 

存取 JDBC 型永久性資料存放區、SSL 憑證金鑰庫或 LDAP 使用者儲存庫 

imqcmd

管理代理程式 

認證已授權使用指令之管理使用者 

imqdbmgr

管理 JDBC 型資料存放區 

存取資料存放區 

您可以在密碼檔案中指定這些密碼,並且使用 -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 產品提供密碼檔案範例。有關此範例檔案的位置,請參閱附錄 AMessage QueueTM 資料的特定平台位置

透過防火牆連線

當用戶端應用程式和代理程式之間被防火牆分隔時,需要採取特殊措施來建立連線。一個方法是使用 httpjmshttpsjms 連線服務,在防火牆中「打出通道」;如需詳細資訊,請參閱附錄 CHTTP/HTTPS 支援。不過 HTTP 連線比起其他連線服務較慢;較快速的替代方式是略過 Message Queue 連接埠對映器,並明確指定靜態連接埠位址給所需的連線服務,然後在防火牆開啟此特定的連接埠。這個方法可以使用 jmsssljms 連線服務 (或在不尋常的狀況下,使用 adminssladmin),透過防火牆連線。

表 7–8 靜態連接埠位址的代理程式配置特性

連線服務 

配置特性 

jms

imq.jms.tcp.port

ssljms

imq.ssljms.tls.port

admin

imq.admin.tcp.port

ssladmin

imq.ssladmin.tls.port

Procedure透過防火牆啟用代理程式連線

  1. 將靜態連接埠位址指派給要使用的連線服務。

    若要略過連接埠對映器,並將靜態連接埠號直接指定給連線服務,請設定代理程式配置特性 imq.serviceName. protocolType.port,其中 serviceName 為連線服務名稱,protocolType 為協定類型 (請參閱表 7–8)。如同所有代理程式配置特性,您可以在代理程式的實例配置檔案中指定此特性,或在啟動代理程式時從指令行指定此特性。例如,若要將連接埠號 10234 指派給 jms 連線服務,請在配置檔案中併入下列指令行

       imq.jms.tcp.port=10234
    

    或使用下列指令啟動代理程式

       
    imqbrokerd  -name myBroker  -Dimq.jms.tcp.port=10234
    
  2. 配置防火牆以允許連線至指派給連線服務的連接埠號。

    您也必須允許透過防火牆連線至 Message Queue 的連接埠對映器連接埠 (通常是 7676,除非已重新指定連接埠對映器使用其他連接埠)。例如,在以上範例中,您必須針對連接埠 102347676 開啟防火牆。

稽核記錄

Message Queue 僅在 Enterprise Edition 版本支援稽核記錄。啟用稽核記錄後,Message Queue 會記錄下列類型的事件:

若要將稽核記錄記入 Message Queue 代理程式記錄檔,請將 imq.audit.enabled 代理程式特性設定為 true。記錄檔中的所有稽核記錄都有關鍵字 AUDIT