Sun Java System Application Server 9.1 管理指南

第 9 章 配置安全性

安全性實質上就是資料保護:如何在儲存或傳輸資料時防止對資料進行未授權的存取或損毀。Application Server 具有基於 Java EE 標準的動態可延伸安全性架構。它內置的安全性功能包括密碼學、認證與授權以及公開金鑰基礎架構。Application Server 是基於 Java 安全性模型建置的,該安全性模型使用了一個沙箱,應用程式可以在沙箱中安全地執行,而不會給系統或使用者帶來潛在的危險。本節討論以下主題:

瞭解應用程式和系統安全性

從廣泛意義上講,應用程式安全性有兩種:

除了應用程式安全性以外,還有影響 Application Server 系統中所有應用程式的系統安全性

程式安全性受應用程式開發者的控制,因此本文件不對其進行討論;宣告性安全性受應用程式開發者的控制要少一些,本文件中只偶爾涉及到宣告性安全性。本文件主要針對系統管理員,因此主要討論系統安全性。

管理安全性的工具

Application Server 提供了以下用於管理安全性的工具:

Java 2 Platform, Standard Edition (J2SE) 提供了兩個用於管理安全性的工具:

如需有關使用 keytoolpolicytool 和其他 Java 安全性工具的更多資訊,請參閱位於以下位置的「Java 2 SDK Tools and Utilities」:http://java.sun.com/j2se/1.4.2/docs/tooldocs/tools.html#security

在企業設定檔中,還可以使用另外兩個實作 Network Security Services (NSS) 的工具管理安全性。如需有關 NSS 的更多資訊,請至 http://www.mozilla.org/projects/security/pki/nss/。用於管理安全性的工具包括:

如需有關使用 certutilpk12util 和其他 NSS 安全性工具的更多資訊,請參閱位於以下位置的「NSS Security Tools」:http://www.mozilla.org/projects/security/pki/nss/tools

管理密碼安全性

在 Application Server 中,包含特定網域規格的 domain.xml 檔案最初包含純文字形式的 Sun Java System Message Queue 代理程式密碼。domain.xml 檔案中包含此密碼的元素為 jms-host 元素的 admin-password 屬性。由於在安裝期間不能變更此密碼,因此它不會對安全性產生很大的影響。

但是,您可以使用管理主控台增加使用者和資源,並為這些使用者和資源指定密碼。部分密碼將以純文字形式寫入 domain.xml 檔案,例如用於存取資料庫的密碼。將這些純文字形式的密碼保存在 domain.xml 檔案中可能會破壞安全性。您可以對 domain.xml 中的任何密碼進行加密,包括 admin-password 屬性或資料庫密碼。下列主題中包含有關安全性密碼的管理說明:

domain.xml 檔案中的密碼進行加密

若要對 domain.xml 檔案中的密碼進行加密,請依照下列步驟執行:

  1. domain.xml 檔案常駐的目錄 (依預設,此目錄為 domain-dir/config) 中,執行以下 asadmin 指令:


    asadmin create-password-alias --user admin alias-name
    

    例如,


    asadmin create-password-alias --user admin jms-password

    螢幕將顯示輸入密碼提示 (在本範例中為 admin)。請參閱 create-password-aliaslist-password-aliasesdelete-password-alias 指令的線上手冊,以取得更多資訊。

  2. 移除並替代 domain.xml 中的密碼。使用 asadmin set 指令可以完成此作業。使用 set 指令實現此目的的範例如下:


    asadmin set --user admin server.jms-service.jms-host.
    default_JMS_host.admin-password='${ALIAS=jms-password}'

    備註 –

    將別名密碼以單引號括住,如範例所示。


  3. 重新啟動相關網域的 Application Server。

保護具有編碼密碼的檔案

某些檔案包含需要使用檔案系統許可權進行保護的編碼密碼。這些檔案包括:

變更主密碼

主密碼 (MP) 是全局性的共用密碼。它從不用於認證,也從不會在網路上傳輸。此密碼是整體安全性的重點;使用者可以選擇在需要時手動輸入此密碼,也可以將其隱藏在檔案中。它是系統中最敏感的資料。使用者可以移除此檔案,以強制系統提示您輸入主密碼。主密碼變更時,會重新儲存在主密碼金鑰庫中,也就是 Java JCEKS 類型金鑰庫。

若要變更主密碼,請執行下列步驟:

  1. 停止網域的 Application Server。使用 asadmin change-master-password 指令會提示輸入舊密碼和新密碼,然後重新加密所有附屬項目。例如︰


    asadmin change-master-password>
    Please enter the master password>
    Please enter the new master password>
    Please enter the the new master password again>
  2. 重新啟動 Application Server。


    注意 – 注意 –

    此時,不能啟動正在執行的伺服器實例並且不能重新啟動正在執行的伺服器實例,除非已變更這些實例所對映的節點代理程式上的 SMP。如果在變更伺服器實例的 SMP 之前重新啟動了該伺服器實例,它將無法啟動。


  3. 一次停止一個節點代理程式及其相關伺服器。再次執行 asadmin change-master-password 指令,然後重新啟動節點代理程式及其相關伺服器。

  4. 繼續對下一個節點代理程式執行這些步驟,直到對所有節點代理程式均已執行這些步驟。這樣可以完成輪替變更。

使用主密碼和金鑰庫

主密碼是安全金鑰庫的密碼。建立新的應用程式伺服器網域之後,即會產生新的自我簽署憑證,並將其儲存在使用主密碼鎖定的相關金鑰庫中。如果主密碼並非預設,start-domain 指令會提示您輸入主密碼。輸入正確的主密碼之後,網域就會啟動。

建立與網域相關聯的節點代理程式之後,節點代理程式就會將資料與網域進行同步化。執行此項作業的同時,還會將金鑰庫同步化。任何由此節點代理程式控制的伺服器實例都必須開啟金鑰庫。由於此金鑰庫基本上和網域建立程序所建立的金鑰庫相同,因此只能由相同的主密碼開啟。但是主密碼本身永遠都不會同步化;意即在同步化期間,並不會將主密碼傳送到節點代理程式,但它必須可供節點代理程式在本機使用。這就是在建立和/或啟動節點代理程式時會提示您輸入主密碼的原因,而您所輸入的密碼,必須和您在建立/啟動網域時所輸入的密碼相同。若網域的主密碼有所變更,則必須執行相同的步驟,在每個和此網域相關聯的節點代理程式上變更主密碼。

變更管理員密碼

管理密碼安全性中論述了如何加密管理員密碼。強烈建議您加密管理員密碼。若要在加密管理員密碼之前變更管理員密碼,請使用 asadmin set 指令。使用 set 指令實現此目的的範例如下:


asadmin set --user admin server.jms-service.jms-host.default_JMS_host.admin-password=new_pwd

請參閱管理主控台線上說明,取得使用管理主控台變更管理密碼的說明。

關於認證與授權

認證與授權是應用程式伺服器安全性的核心概念。以下主題論述了與認證和授權相關的內容:

認證實體

認證是實體 (使用者、應用程式或元件) 用於確定其他實體是否是其宣告的實體的方法。實體使用安全性憑證對其自身進行認證。憑證可以是使用者名稱和密碼、數位證書或其他憑證。

通常,認證表示使用者使用使用者名稱和密碼登入某個應用程式;也可以指 EJB 從伺服器請求資源時,提供安全性憑證。通常,伺服器或應用程式要求使用者端進行認證;另外,使用者端也可以要求伺服器對其自身進行認證。如果認證是雙向的,則稱為相互認證。

當實體嘗試存取受保護的資源時,Application Server 將使用為該資源配置的認證機制來確定是否授予存取權。例如,使用者可以在 Web 瀏覽器中輸入使用者名稱和密碼,如果應用程式順利完成了對這些憑證的驗證,則表示該使用者已通過認證。在此階段作業的剩餘時間內,該使用者將始終與這個經過認證的安全性身份相關聯。

Application Server 支援四種認證類型。應用程式在其部署描述元中指定所使用的認證類型。

表 9–1 Application Server 認證方法

認證方法

通訊協定

說明

使用者憑證加密

BASIC 

HTTP (SSL 選取性) 

使用伺服器的內建快顯式登入對話方塊。 

無,除非使用 SSL。 

FORM 

HTTP (SSL 選取性) 

應用程式提供它自己的自訂登入頁面和錯誤頁面。 

無,除非使用 SSL。 

CLIENT-CERT 

HTTPS (基於 SSL 的 HTTP) 

伺服器使用公開金鑰證書認證使用者端。 

SSL 

驗證單次登入

單次登入可以讓一個虛擬伺服器實例中的多個應用程式共用使用者認證狀態。使用單次登入,登入到一個應用程式的使用者也會隱式登入到需要相同認證資訊的其他應用程式。

單次登入基於群組。其部署描述元定義相同的群組並使用相同認證方法 (BASIC、FORM、CLIENT-CERT) 的所有 Web 應用程式,均共用單次登入。

對於為 Application Server 定義的虛擬伺服器,依預設已啟用單次登入。

對使用者進行授權

使用者通過認證後,授權層級將決定該使用者可以執行哪些作業。使用者獲得的授權以其角色為依據。例如,人力資源應用程式可以授權管理者檢視所有員工的個人資訊,但每個員工僅能檢視自己的個人資訊。如需有關角色的更多資訊,請參閱瞭解使用者、群組、角色和範圍

指定 JACC 提供者

JACC (Java 容器授權合約) 屬於 Java EE 規格,它定義可插接式授權提供者介面。這可以讓管理員設置協力廠商外掛程式模組以執行授權。

依預設,Application Server 提供符合 JACC 規格並基於檔案的簡單授權引擎。還可以指定其他協力廠商 JACC 提供者。

JACC 提供者使用 Java 認證與授權服務 (JAAS) API。JAAS 可以讓服務對使用者進行認證並強制對使用者進行存取控制。JAAS 實作了 Java 技術版本的標準可插接式認證模組 (PAM) 框架。

稽核認證與授權決策

Application Server 可以透過稽核模組提供對所有認證與授權決策的稽核追蹤。Application Server 提供預設的稽核模組,還提供了自訂稽核模組的功能。

配置訊息安全性

訊息安全性可以讓伺服器在訊息層執行 Web 服務呼叫和回應的點對點認證。Application Server 使用 SOAP 層上的訊息安全性提供者實作訊息安全性。訊息安全性提供者提供以下資訊,例如請求訊息和回應訊息所需的認證類型。受支援的認證類型包括:

此發行版本包括兩個訊息安全性提供者。可以為 SOAP 層的認證配置訊息安全性提供者。可以配置的提供者包括 ClientProviderServerProvider

訊息層安全性支援以 (可插接式) 認證模組的形式整合在 Application Server 及其用戶端容器中。依預設,Application Server 中的訊息層安全性處於停用狀態。

您可以為整個 Application Server 或者為特定的應用程式或方法配置訊息層安全性。第 10 章, 配置訊息安全性中論述了如何配置 Application Server 層級的訊息安全性。「開發者指南」討論如何在應用程式層級上配置訊息安全性。

瞭解使用者、群組、角色和範圍

Application Server 對以下實體強制執行其認證與授權策略:


備註 –

儘管使用者和群組是為整個 Application Server 指定的,但是每個應用程式都需要定義自己的角色。封裝和部署應用程式時,應用程式會指定使用者/群組和角色之間的對映,如下圖所示。


圖 9–1 角色對映

此圖顯示為群組指定使用者的方式、為角色指定使用者和群組的方式,以及應用程式使用群組和角色的方式。

使用者

使用者是已在 Application Server 中定義的個人 (或應用程式) 身份。使用者可以與群組關聯。Application Server 認證服務可以管理多個範圍中的使用者。

群組

J2EE 群組 (或簡稱群組) 是依循一般特性 (例如職務或用戶設定檔) 進行分類的使用者類別。例如,假定電子商務應用程式的使用者屬於 customer 群組,但是大用戶可以屬於 preferred 群組。將使用者進行群組分類可以簡化有大量使用者時的存取控制。

角色

角色定義使用者可以存取哪些應用程式以及每個應用程式的哪些部分,以及使用者可以執行的作業。亦即,角色決定了使用者的授權層級。

例如,假定在人事應用程式中,所有員工均可以存取電話號碼和電子郵件位址但只有管理者才能存取薪水資訊。該應用程式至少可以定義兩個角色:employeemanager;僅允許 manager 角色的使用者檢視薪水資訊。

角色與使用者群組的不同之處在於,角色在應用程式中定義功能,而使用者群組是以某一方式相關的一組使用者。例如,假定在人事應用程式中有 full-timepart-timeon-leave 幾個群組,但所有這些群組中的使用者仍是 employee 角色。

角色是在應用程式部署描述元中定義的。相反,群組是針對整個伺服器和範圍而定義的。應用程式開發者或部署者在每個應用程式的部署描述元中將角色對映至一個或多個群組。

範圍

範圍 (也稱為安全策略網域安全網域),是伺服器定義和強制執行一般安全策略的範圍。在實際應用中,範圍是伺服器儲存使用者和群組資訊的儲存庫。

Application Server 預先配置了三個範圍:file (初始預設範圍)、certificateadmin-realm。您還可以設定 ldap JDBCsolaris 範圍或自訂範圍。應用程式可以在其部署描述元中指定要使用的範圍。如果應用程式不指定範圍,Application Server 將使用其預設範圍。

file 範圍中,伺服器將使用者憑證儲存在本地名為 keyfile 的檔案中。您可以使用管理主控台來管理 file 範圍中的使用者。

certificate 範圍中,伺服器將使用者憑證儲存在憑證資料庫中。使用 certificate 範圍時,伺服器結合使用憑證和 HTTPS 通訊協定認證 Web 用戶端。如需有關憑證的更多資訊,請參閱證書和 SSL 簡介

admin-realm 也是一個 FileRealm,它將管理員使用者憑證儲存在本地名為 admin-keyfile 的檔案中。您可以使用管理主控台管理此範圍中的使用者,其方法與您管理 file 範圍中的使用者的方法相同。

ldap 範圍中,伺服器將從簡易資料存取協定 (LDAP) 伺服器 (例如 Sun Java System Directory Server) 中取得使用者憑證。LDAP 是一種可以讓任何人在網路 (無論是公共網際網路還是企業內部網路) 中尋找組織、個人和其他資源 (例如檔案和裝置) 的協定。如需有關管理 ldap 範圍中的使用者和群組的資訊,請參閱您的 LDAP 伺服器文件。

JDBC 範圍中,伺服器會從資料庫取得使用者憑證。Application Server 會使用資料庫資訊,以及配置檔的已啟用 JDBC 範圍選項。

solaris 範圍中,伺服器將從 Solaris 作業系統中取得使用者憑證。Solaris 9 OS 和更高版本支援此範圍。如需有關管理 solaris 範圍中的使用者和群組的資訊,請參閱您的 Solaris 文件。

自訂範圍是使用者憑證的任何其他儲存庫,例如關聯式資料庫或協力廠商元件。如需更多資訊,請參閱管理主控台線上說明。

Procedure配置 Java EE 應用程式的 JDBC 範圍

Application Server 可讓您在 JDBC 範圍中指定使用者的憑證,而不是在連線池中指定。使用 JDBC 範圍取代連線池,可防止其他應用程式瀏覽使用者憑證的資料庫表格。使用者的憑證是使用者的名稱和密碼。


備註 –

依預設,不支援在 JDBC 範圍中儲存純文字的密碼。一般情況下不應該儲存純文字密碼。


  1. 建立資料庫表格,在其中儲存範圍的使用者憑證。

    建立資料庫表格的方法,需視所使用的資料庫而定。

  2. 將使用者憑證增加到在 步驟 1 中建立的資料庫表格。

    將使用者的憑證增加到資料庫表格的方法,需視所使用的資料庫而定。

  3. 建立 JDBC 範圍。

    使用管理主控台 GUI 來達成此目的。如需有關建立 JDBC 範圍的說明,請參閱管理主控台 GUI 的線上說明。

  4. 將在步驟 3 中建立的範圍指定為應用程式的範圍。

    若要指定範圍,請針對應用程式修改適當的部署描述元:

    • 對於企業歸檔 (EAR) 檔案中的企業應用程式,請修改 sun-application.xml 檔案。

    • 對於 Web 應用程式歸檔 (WAR) 檔案中的 Web 應用程式,請修改 web.xml 檔案。

    • 對於 EJB JAR 檔案中的企業 Bean,請修改 sun-ejb-jar.xml 檔案。

    如需有關如何指定範圍的更多資訊,請參閱「Sun Java System Application Server 9.1 Developer’s Guide」中的「How to Set a Realm for an Application or Module」

  5. 將安全性角色指定給範圍中的使用者。

    若要將安全性角色指定給使用者,請將 security-role-mapping 元素增加到在 步驟 4 中所修改的部署描述元。

    下列範例顯示了 security-role-mapping 元素,此元素會將安全性角色 Employee 指定給使用者 Calvin

    <security-role-mapping>
        <role-name>Employee</role-name>
        <principal-name>Calvin</principal-name>
      </security-role-mapping>

證書和 SSL 簡介

本節論述以下主題:

關於數位證書

數位憑證 (或簡稱憑證) 是在網際網路上唯一識別人員和資源的電子檔案。證書還可以使兩個實體之間能夠進行安全、機密的通訊。

證書有很多種類型,例如個人證書 (由個人使用) 和伺服器證書 (用於透過安全套接字層 [SSL] 技術在伺服器和使用者端之間建立安全階段作業)。如需有關 SSL 的更多資訊,請參閱關於安全套接字層

憑證以公開金鑰密碼學為基礎,公開金鑰密碼學使用數位金鑰 (很長的數位) 對資訊進行加密或編碼,從而使資訊只能被指定的接收者讀取。然後,接收者對資訊進行解密 (解碼),即可讀取該資訊。

一個金鑰對包含一個公開金鑰和一個私密金鑰。所有者對公開金鑰進行發放並使任何人都可以使用該公開金鑰。但是所有者永遠不會發放私密金鑰;私密金鑰始終是保密的。由於金鑰與數學相關,因此使用了金鑰對中的一個金鑰進行加密的資料只能透過金鑰對中的另一個金鑰進行解密。

證書就好像一本護照:它可以識別持有者並提供其他重要資訊。憑證由稱為憑證授權單位 (CA) 的可信任的協力廠商發行。CA 類似於護照申領辦公室:它將驗證憑證持有者的身份並對憑證進行簽署,以使他人無法偽造或竄改憑證。CA 對證書進行簽名之後,持有者可以提供該證書做為身份證明並建立加密的機密通訊。

最重要的是,憑證會將所有者的公開金鑰連結至所有者身份。與護照將照片連結至其持有者的個人資訊類似,證書將公開金鑰連結至有關其所有者的資訊。

除了公開金鑰以外,證書通常還包括以下資訊:

數位憑證受 x.509 格式的技術規格約束。為了驗證certificate 範圍中某個使用者的身份,認證服務會將 X.509 憑證的共用名稱欄位當成主要名稱,對 X.509 憑證進行驗證。

關於證書鏈

Web 瀏覽器已預先配置了一組瀏覽器自動信任的 CA 憑證。來自其他憑證授權單位的所有憑證都必須附帶憑證鏈,以驗證這些憑證是否有效。憑證鏈是由連續 CA 憑證發行的憑證序列,最終以根 CA 憑證結束。

憑證最初產生時是自簽名憑證。自簽名證書是其發行者 (簽名者) 與主旨 (其公開金鑰由該證書進行認證的實體) 相同的證書。如果所有者向 CA 傳送證書簽名請求 (CSR),然後輸入回應,自簽名證書將被證書鏈取代。鏈的底部是由 CA 發行的、用於認證主旨的公開金鑰證書 (回覆)。鏈中的下一個證書是認證 CA 公開金鑰的證書。通常,這是一個自簽名證書 (即,來自 CA、用於認證其自身公開金鑰的證書),並且是鏈中的最後一個證書。

在其他情況下,CA 可能會傳回一個證書鏈。在此情況下,鏈的底部證書是相同的 (由 CA 簽名的證書,用於認證金鑰項目的公開金鑰),但是鏈中的第二個證書是由其他 CA 簽名的證書,用於認證您向其傳送了 CSR 的 CA 的公開金鑰。然後,鏈中的下一個憑證是用於認證第二個 CA 金鑰的憑證,依此類推,直至到達自簽名的憑證。因此,鏈中的每個證書 (第一個證書之後的證書) 都需要認證鏈中前一個證書的簽名者的公開金鑰。

關於安全套接字層

安全套接字層 (SSL) 是用於確定網際網路通訊和作業事件保護的最常見標準。Web 應用程式使用 HTTPS (基於 SSL 的 HTTP),HTTPS 使用數位證書來確保在伺服器和使用者端之間進行安全、機密的通訊。在 SSL 連線中,使用者端和伺服器在傳送資料之前都要對資料進行加密,然後由接受者對其進行解密。

Web 瀏覽器 (用戶端) 需要與某個安全站點建立連線時,則會發生 SSL 交換

交握之後,即表示使用者端已驗證了網站的身份,並且只有該使用者端和 Web 伺服器擁有該階段作業金鑰副本。從現在開始,使用者端和伺服器便可以使用該階段作業金鑰對彼此間的所有通訊進行加密。這樣就確保了使用者端和伺服器之間的通訊的安全。

SSL 標準的最新版本稱為 TLS (傳輸層安全性)。Application Server 支援安全套接字層 (SSL) 3.0 和傳輸層安全性 (TLS) 1.0 加密協定。

若要使用 SSL,Application Server 必須擁有接受安全連線的每個外部介面或 IP 位址的憑證。只有安裝了數位證書之後,大多數 Web 伺服器的 HTTPS 服務才能夠執行。請使用使用 keytool 公用程式產生憑證中說明的程序來設定 Web 伺服器可以用於 SSL 的數位憑證。

關於加密算法

加密算法是用於加密或解密的加密演算法。SSL 和 TLS 協定支援用於伺服器和使用者端彼此進行認證、傳輸證書和建立階段作業金鑰的各種加密算法。

某些加密算法比其他加密算法更強大且更安全。使用者端和伺服器可以支援不同的密碼組。從 SSL3 和 TLS 協定中選取加密算法。在安全連線期間,使用者端和伺服器同意在通訊中使用它們均已啟用的最強大的加密算法,因此通常需要啟用所有加密算法。

使用基於名稱的虛擬主機

對安全應用程式使用基於名稱的虛擬主機可能會帶來問題。這是 SSL 協定本身的設計限制。必須先進行 SSL 交握 (使用者端瀏覽器在此時接受伺服器證書),然後才能存取 HTTP 請求。這樣,在認證之前就無法確定包含虛擬主機名稱的請求資訊,因此也不能將多個證書指定給單一 IP 位址。

如果單一 IP 位址上的所有虛擬主機均需要對照同一證書進行認證,則增加多個虛擬主機將不會影響伺服器上正常的 SSL 作業。但是請注意,大多數瀏覽器會將伺服器的網域名稱與憑證中列出的網域名稱 (如果有,且主要適用於官方 CA 簽署憑證) 進行對照。如果網域名稱不匹配,這些瀏覽器將顯示警告。通常在生產環境中,只將基於位址的虛擬主機與 SSL 配合使用。

關於防火牆

防火牆控制兩個或多個網路之間的資料流,並管理網路之間的連結。防火牆可能包含硬體和軟體元素。本節描述了一些一般防火牆架構及其配置。此處的資訊主要針對 Application Server。如需有關特定防火牆技術的詳細資訊,請參閱防火牆供應商提供的文件。

通常,需要對防火牆進行配置,以便使用者端存取所需的 TCP/IP 連接埠。例如,如果 HTTP 偵聽程式正在連接埠 8080 上作業,則將防火牆配置為僅允許處理連接埠 8080 上的 HTTP 請求。同樣地,如果為連接埠 8181 設定了 HTTPS 請求,則必須將防火牆配置為允許處理連接埠 8181 上的 HTTPS 請求。

如果需要從網際網路對 EJB 模組進行直接的 RMI-IIOP (全稱為 Remote Method Invocations over Internet Inter-ORB Protocol [通過網際網路 ORB 交換協定的遠端方法呼叫]) 存取,則還需要開啟 RMI-IIOP 偵聽程式連接埠,但強烈建議您不要這樣做,因為這樣可能會破壞安全性。

在雙防火牆架構中,您必須將外部防火牆配置為允許處理 HTTP 和 HTTPS 作業事件。您必須將內部防火牆配置為允許 HTTP 伺服器外掛程式與防火牆後面的 Application Server 進行通訊。

關於證書檔案

安裝 Application Server 時會產生一個適用於內部測試的 JSSE (Java Secure Socket Extension) 或 NSS (Network Security Services) 格式的數位憑證。依預設,Application Server 將其憑證資訊儲存在 domain-dir /config 目錄下的憑證資料庫中:

變更憑證檔案的位置

供開發使用的金鑰庫檔案和信任庫檔案儲存在 domain-dir/config 目錄中。

使用管理主控台以增加或修改憑證檔案之新位置的欄位值。


-Dcom.sun.appserv.nss.db=${com.sun.aas.instanceRoot}/NSS-database-directory

其中 NSS-database-directory 是 NSS 資料庫的位置。

使用 Java 安全套接字延伸 (JSSE) 工具

使用 keytool 可以設定和使用 JSSE (Java 安全套接字延伸) 數位憑證。在開發者設定檔的伺服器端,Application Server 使用 JSSE 格式管理憑證和金鑰庫。在所有設定檔中,用戶端 (應用程式用戶端或獨立用戶端) 均使用 JSSE 格式。

J2SE SDK 附帶有 keytool,可以讓管理員管理公開/私密金鑰對和關聯憑證。還可以讓使用者快取正與其通訊的另一方的公開金鑰 (以證書形式)。

若要執行 keytool,必須配置 shell 環境,以使 J2SE /bin 目錄位於路徑中,或者指令行中必須存在該工具的完整路徑。如需有關 keytool 的更多資訊,請參閱位於以下位置的 keytool 文件:http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/keytool.html

使用 keytool 公用程式

以下範例說明了與使用 JSSE 工具處理憑證相關的用法︰

使用 keytool 公用程式產生憑證

使用 keytool 產生、匯入和匯出憑證。依預設,keytool 將在其執行目錄中建立金鑰庫檔案。

  1. 變更至要執行憑證的目錄。

    始終在包含金鑰庫檔案和信任庫檔案的目錄中產生憑證,依預設,該目錄為 domain-dir/config。如需有關變更這些檔案位置的資訊,請參閱變更憑證檔案的位置

  2. 輸入以下 keytool 指令,以在金鑰庫檔案 keystore.jks 中產生憑證:


    keytool -genkey -alias keyAlias-keyalg RSA
     -keypass changeit
     -storepass changeit
    -keystore keystore.jks

    使用任何專屬名稱做為 keyAlias。如果您已變更金鑰庫或私密金鑰密碼的預設值,請使用新密碼取代以上指令中的 changeit。預設金鑰密碼別名為「s1as」。

    螢幕上將顯示提示,要求您提供姓名、組織和其他資訊,keytool 將使用這些資訊產生憑證。

  3. 輸入以下 keytool 指令,以將產生的憑證匯出至檔案 server.cer (或 client.cer [如果您願意]):


    keytool -export -alias keyAlias-storepass changeit
     -file server.cer
     -keystore keystore.jks
  4. 如需由憑證授權單位簽署的憑證,請參閱使用 keytool 公用程式簽署數位憑證

  5. 若要建立信任庫檔案 cacerts.jks,並將憑證增加至該信任庫,請輸入以下 keytool 指令:


    keytool -import -v -trustcacerts
    -alias keyAlias
     -file server.cer
    -keystore cacerts.jks
     -keypass changeit
  6. 如果您已變更金鑰庫或私密金鑰密碼的預設值,請使用新密碼取代以上指令中的 changeit

    工具將顯示有關證書的資訊並提示您是否要信任該證書。

  7. 鍵入 yes,然後按下 Enter 鍵。

    keytool 便會顯示如下資訊:


    Certificate was added to keystore
    [Saving cacerts.jks]
  8. 重新啟動 Application Server。

使用 keytool 公用程式簽署數位憑證

建立數位憑證之後,所有者必須簽署該憑證以防偽造。電子商務站點或那些身份認證對其很重要的站點可以從知名的憑證授權機構 (CA) 購買憑證。如果無需考量認證 (例如當私密安全通訊可以滿足全部需求時),則可節省獲取 CA 憑證所花費的時間和費用並使用自我簽署憑證。

  1. 請依照 CA 網站上的說明產生憑證金鑰對。

  2. 下載產生的證書金鑰對。

    將憑證儲存在包含金鑰庫檔案和信任庫檔案的目錄中,依預設,該目錄為 domain-dir/config。請參閱變更憑證檔案的位置

  3. 在 shell 中,變更至包含憑證的目錄。

  4. 使用 keytool 將憑證匯入本機金鑰庫和本機信任庫 (如有必要)。


    keytool -import -v -trustcacerts
    -alias keyAlias
     -file server.cer
    -keystore cacerts.jks
     -keypass changeit
    -storepass changeit

    如果金鑰庫密碼或私密金鑰密碼不是預設密碼,請使用新密碼取代以上指令中的 changeit

  5. 重新啟動 Application Server。

使用 keytool 公用程式刪除憑證

若要刪除現有憑證,請使用 keytool -delete 指令,例如:

keytool -delete
 -alias keyAlias
 -keystore keystore-name
 -storepass password

使用 Network Security Services (NSS) 工具

在叢集和企業設定檔的伺服器端,使用 Network Security Services (NSS) 數位憑證管理儲存私密金鑰和憑證的資料庫。對於用戶端 (應用程式用戶端或獨立用戶端),使用使用 Java 安全套接字延伸 (JSSE) 工具中所述的 JSSE 格式。

使用 Network Security Services (NSS) 管理安全性的工具包括:

這些工具位於 as-install/lib/ 目錄中。以下環境變數用於指向 NSS 安全性工具的位置︰

在這些範例中,憑證一般名稱 (CN) 是指用戶端或伺服器的名稱。CN 還用於在 SSL 交換過程中比較憑證名稱和產生憑證的主機名稱。如果憑證名稱和主機名稱不符,則在 SSL 交換過程中會產生警告或異常。在某些範例中,為方便起見,使用憑證一般名稱 CN=localhost,以便所有使用者均可以使用該憑證,而不必使用其真實主機名稱建立新憑證。

以下小節中的範例說明了與使用 NSS 工具處理憑證相關的用法︰

使用 certutil 公用程式

執行 certutil 之前,請確定 LD_LIBRARY_PATH 指向執行此公用程式所需之程式庫的位置。這個位置可以從 asenv.conf (整個產品的配置檔案) 中 AS_NSS_LIB 的值加以識別。

憑證資料庫工具 certutil 是 NSS 指令行公用程式,可建立和修改 Netscape Communicator cert8.dbkey3.db 資料庫檔案。該公用程式還可以列出、產生、修改或刪除 cert8.db 檔案中的憑證,以及建立或變更密碼、產生新的公開和私密金鑰對、顯示金鑰資料庫的內容或刪除 key3.db 檔案中的金鑰對。

金鑰和憑證管理程序通常以在金鑰資料庫中建立金鑰開始,然後在憑證資料庫中產生和管理憑證。以下文件論述了如何使用 NSS (包括 certutil 公用程式的語法) 管理憑證和金鑰資料庫:http://www.mozilla.org/projects/security/pki/nss/tools/certutil.html

以下清單中的每個項目均提供了使用 NSS 和 JSSE 安全性工具建立和/或管理憑證的範例。

使用 pk12util 公用程式匯入和匯出憑證

pk12util 指令行公用程式用於以 PKCS12 格式在憑證/金鑰資料庫和檔案之間匯入與匯出金鑰和憑證。PKCS12 為公開金鑰加密標準 (PKCS) #12,個人資訊交換語法標準。如需有關 pk12util 公用程式的說明,請至http://www.mozilla.org/projects/security/pki/nss/tools/pk12util.html

使用 modutil 增加和刪除 PKCS11 模組

安全性模組資料庫工具 modutil 是指令行公用程式,用於管理 secmod.db 檔案或硬體記號中的 PKCS #11 (加密記號介面標準) 模組資訊。您可以使用此工具來增加和刪除 PKCS #11 模組、變更密碼、設定預設值、列出模組內容、啟用或停用槽、啟用或停用 FIPS-140-1 規範遵循,以及為加密作業指定預設提供者。此工具還可以建立 key3.dbcert7.db secmod.db 安全性資料庫檔案。如需有關此工具的更多資訊,請至 http://www.mozilla.org/projects/security/pki/nss/tools/modutil.html

將 Application Server 與硬體加密加速器搭配使用

您可以使用硬體加速器記號來改善加密效能,同時提供安全金鑰儲存功能。另外,您也可以經由智慧卡,為一般使用者提供行動式安全金鑰儲存。

Sun Java System Application Server 支援使用 PKCS#11 記號進行 SSL 或 TLS 通訊,並支援使用 Network Security Services (NSS) 工具管理金鑰和 PKCS#11 記號。本小節說明 Application Server 如何提供上述支援,同時帶您逐步執行相關配置的程序。

J2SE 5.0 PKCS#11 提供者可以和 Application Server 執行階段輕鬆整合。藉由這些提供者,您可以在 Application Server 中使用硬體加速器和其他 PKCS#11 記號,以達到快速效能,並保護 SSL 或 TLS 通訊中原有的私密金鑰。

本小節包含下列主題:

關於配置硬體加密加速器

Sun Java System Application Server 已通過 Sun Crypto Accelerator 1000 (SCA-1000) 和 SCA-4000 測試。

Application Server 和 J2SE 5.0 一同使用時,可以和 PKCS#11 記號進行通訊。和 Application Server 一起封裝的是 NSS PKCS#11 記號程式庫 (適用於 NSS 內部 PKCS#11 模組,通常稱為 NSS 軟體記號) 以及 NSS 指令行管理工具。如需更多詳細資訊,請參閱使用 Network Security Services (NSS) 工具

使用 NSS 工具根據 PKCS#11 記號和 J2SE PKCS#11 提供者建立金鑰和憑證,以便在執行階段存取記號金鑰和憑證。PKCS#11 提供者為加密服務的提供者,可做為原生 PKCS#11 程式庫外圍的包裝程式。PKCS#11 記號通常是指含原生 PKCS#11 介面的所有硬體和軟體記號。硬體記號是以實體裝置 (如硬體加速器和智慧卡) 實作的 PKCS#11 記號。軟體記號則是完全以軟體實作的 PKCS#11 記號。


備註 –

如果您在 J2SE 1.4.x 平台上執行 Application Server,則僅支援一個 PKCS#11 記號,即 NSS 軟體記號。


在 Microsoft Windows 環境下,請將 NSS 程式庫 AS_NSS 和 NSS 工具目錄 AS_NSS_BIN 的位置,增加到 PATH 環境變數中。為簡化說明,本小節所描述的程序僅使用 UNIX 指令。必要時請將 UNIX 變數替代為 Windows 變數。

硬體加密加速器的配置可分為兩個主要程序:

配置 PKCS#11 記號

本小節說明如何以 NSS 安全性工具 modutil 配置 PKCS#11 記號。請使用下列程序來配置 PKCS#11 記號。

輸入下列指令 (全部置於同一行):

modutil -dbdir AS_NSS_DB -nocertdb -force -add moduleName -libfile
 absolute_path_of_pkcs11_library -mechanisms list_of_security_mechanisms

其中,AS_NSS_DB 是 NSS 資料庫目錄 (和您使用 Domain Administration Server (DAS) 時的 AS_DOMAIN_CONFIG 相同)

例如,若要配置硬體加速器記號,請輸入下列內容 (全部置於同一行):

modutil -dbdir AS_NSS_DB -nocertdb -force -add "Sun Crypto Accelerator" -libfile
 /opt/SUNWconn/crypto/lib/libpkcs11.so -mechanisms RSA:DSA:RC4:DES

此範例中的硬體加速器為 SCA–1000 加密加速器。依預設,對應的 PKCS#11 程式庫位於 /opt/SUNWconn/crypto/lib/libpkcs11.so

mechanisms 必須是記號上可供使用之加密機制的完整清單。如果僅使用數個可用的加密機制,請參閱配置 J2SE 5.0 PKCS#11 提供者。如要取得所有支援機制的完整清單,請參閱 NSS 安全性工具網站上的 modutil 文件,網址是 http://www.mozilla.org/projects/security/pki/nss/tools

以下範例假設在記號安裝期間所指定的記號名稱為 mytoken

為驗證硬體加速器的配置是否正確,請輸入下列指令:

modutil -list -dbdir AS_NSS_DB

標準輸出如以下所示:


Using database directory /var/opt/SUNWappserver/domains/domain1/config ...

Listing of PKCS#11 Modules
-----------------------------------------------------------
  1. NSS Internal PKCS#11 Module
         slots: 2 slots attached
        status: loaded

         slot: NSS Internal Cryptographic Services                            
        token: NSS Generic Crypto Services

         slot: NSS User Private Key and Certificate Services                  
        token: NSS Certificate DB

  2. Sun Crypto Accelerator
        library name: /opt/SUNWconn/crypto/lib/libpkcs11.so
         slots: 1 slot attached
        status: loaded

         slot: Sun Crypto Accelerator:mytoken
        token: mytoken
-----------------------------------------------------------

 

管理金鑰和憑證

本小節說明數種使用 certutilpk12util 來建立和管理金鑰與憑證的常用程序。如需有關 certutilpk12util 的詳細資訊,請參閱使用 Network Security Services (NSS) 工具以及 NSS 安全性工具網站上的文件,網址是 http://www.mozilla.org/projects/security/pki/nss/tools


備註 –

藉由在 java.security 特性檔案 (位於 Java 執行階段的 JAVA_HOME/jre/lib/security 目錄中) 中配置 PKCS#11 提供者,您還可以使用 J2SE keytool 公用程式來管理金鑰和憑證。如需使用 keytool 的詳細資訊以及「Java PKCS#11 Reference Guide」,請參閱 http://java.sun.com/j2se/1.5.0/docs/guide/security/p11guide.html


本小節說明下列主題:

列出金鑰和憑證

使用私密金鑰和憑證

使用 certutil 來建立自我簽署的憑證,並匯入或匯出憑證。若要匯入或匯出私密金鑰,請使用 pk12util 公用程式。如需更多詳細資訊,請參閱使用 Network Security Services (NSS) 工具


注意 – 注意 –

在 Application Server 中,請勿直接使用 NSS 工具 certutilmodutil 來修改 NSS 密碼。否則 Application Server 中的安全性資料可能會毀壞。


配置 J2SE 5.0 PKCS#11 提供者

Application Server 需藉由 J2SE PKCS#11 提供者,在執行階段存取位於 PKCS#11 記號中的金鑰和憑證。依預設,Application Server 會為 NSS 軟體記號配置 J2SE PKCS#11 提供者。本小節說明如何置換 J2SE PKCS#11 提供者的預設配置。

在 Application Server 上,會為每個 PKCS#11 記號產生下列預設的 PKCS#11 配置參數。

這些配置符合「Java PKCS#11 Reference Guide」所描述的語法。


備註 –

只要求名稱參數必須為唯一。J2SE 5.0 有些舊版本僅支援字母數字式的字元。


您可以建立自訂的配置檔案,以置換預設的配置參數。例如,您可以在 SCA–1000 中,明確停用 RSA 密碼和 RSA 金鑰對產生器。如需有關停用 RSA 密碼和 RSA 金鑰對產生器的詳細資訊,請參閱 http://www.mozilla.org/projects/security/pki/nss/tools

建立自訂的配置檔案:

  1. 使用下列程式碼建立名為 as-install/mypkcs11.cfg 的配置檔案,然後儲存該檔案。


    name=HW1000
    library=/opt/SUNWconn/crypto/lib/libpkcs11.so
    slotListIndex=0
    disabledMechanisms = {
    &#9;CKM_RSA_PKCS
    &#9;CKM_RSA_PKCS_KEY_PAIR_GEN
    }
    omitInitialize=true
  2. 如有必要,請更新 NSS 資料庫。在這個案例中,請更新 NSS 資料庫,這樣才能停用 RSA。

    執行下列指令:


    modutil -undefault "Sun Crypto Accelerator" -dbdir AS_NSS_DB -mechanisms RSA

    mechanisms 清單上的演算法名稱,與預設配置中的演算法名稱不同。如需 NSS 中有效 mechanisms 的清單,請參閱 NSS 安全性工具網站上的 modutil 文件,網址是 http://www.mozilla.org/projects/security/pki/nss/tools

  3. 如下所示進行變更,在適當的位置增加特性以更新伺服器:


    &lt;property name="mytoken" value="&InstallDir;/mypkcs11.cfg"/>

    特性的位置可能是下列其中一處:

    • 若提供者適用於 DAS 或伺服器實例,請將特性增加到相關聯的 &lt;security-service> 之下。

    • 若提供者適用於節點代理程式,請將特性增加到 domain.xml 檔案中,相關聯的 &lt;node-agent> 元素之下。

  4. 重新啟動 Application Server。

    自訂配置將在重新啟動後生效。