Sun ONE logo      上一個      目錄      索引      下一個     

Sun ONE Web Server 6.1 管理員指南

第 4 章
Web 容器與 Web 應用程式之基於 J2EE 的安全性

本章描述了 Sun ONE Web Server 6.1 Web 容器與 Web 應用程式之基於 J2EE 安全性的基本功能。它從論述以下兩種受 Web 伺服器支援的主要認證與授權模型開始:基於存取控制清單 (ACL) 的安全模型與基於 J2EE/Servlet 的安全模型。本章還論述 Sun ONE Web Server 6.1 的新功能,這種新功能可讓您部署能夠利用兩種安全系統優勢的 Java Web 應用程式。

本章的其餘部分主要闡述 J2EE/Servlet 的配置問題,相關的安全性問題將在以下小節中描述:

本章包含下列小節:


關於 Sun ONE Web 伺服器安全性

您可以藉由數種安全性服務與機制 (包括認證、授權和存取控制) 來保護駐留在 Web 伺服器中的資源。

認證是確認識別的程序。授權表示將受限資源的存取權授予身份識別機制與存取控制機制以增強這種限制。認證與授權可以透過多種安全模型與服務進行增強。

Sun ONE Web Server 6.1 支援以下兩類安全模型:由 HTTP 引擎提供的基於 ACL 之安全模型與由 Web 容器提供的基於 J2EE Servlet 版本 2.3 規格之安全模型。

兩種模型共存於 Sun ONE Web Server 6.1 程序的生命週期內。兩種模型均支援用戶端認證與授權等安全性服務。

Sun ONE Web Server 6.1 Web 容器透過基於 Java 認證與授權服務 (JAAS) 的機制為用戶端提供認證服務,透過基於 J2EE 角色的機制為用戶端提供授權服務。Sun ONE Web Server 6.1 提供一種名為本端範圍的範圍。它橋接了這兩種安全模型。

Sun ONE Web Server 6.1 同時支援宣告性安全性與程式化安全性。

Sun ONE Web Server 6.1 可以利用 J2EE 平台的功能,來定義開發與組合應用程式元件的人員和在作業環境中配置應用程式的人員之間的宣告性合約。在應用程式安全性環境範圍中,需要應用程式提供者以能夠滿足應用程式配置期間安全性需求的方式來宣告其應用程式的安全性需求。應用程式所使用的宣告性安全性機制在稱為部署描述元的文件中以宣告性語法進行了陳述。然後,應用程式的部署人員會使用特定的容器工具將部署描述元中的應用程式需求對映至 J2EE 容器所執行的安全性機制。在 Sun ONE Web Server 6.1 中,Web 應用程式的部署描述元檔案為 web.xmlsun-web.xml 檔案。

程式化安全性是指由涉及安全性的應用程式做出的安全性決策。當宣告性安全性單獨不足以表示應用程式的安全模型時,程式化安全性便會非常有用。例如,某個應用程式可能會根據一天當中的具體時間、呼叫參數或 Web 元件內部狀況來做出授權決策。而其他應用程式會根據資料庫中儲存的使用者資訊來限制存取。

本章的其餘部分會向您介紹以下受 Sun ONE Web Server 6.1 支援的主要認證與授權概念:


基於 ACL 的存取控制簡介

基於 ACL 的存取控制在第 9 章「控制對伺服器的存取」中作了詳細描述。下列小節簡要概述了主要概念。

Sun ONE Web Server 6.1 通過使用儲存在本機上的存取控制清單 (ACL) 來支援認證與授權,這些清單描述了使用者擁有的資源存取權類型。例如,ACL 中的某個項目可以授予使用者 John 對特定資料夾 miscread 許可權。

acl "path=/export/user/990628.1/docs/misc/";

authenticate (user,group) {

database = "default";

method = "basic";

};

deny (all) (user=”anyone”);

allow (read) (user = "John");

Sun ONE Web Server 6.1 中的核心 ACL 支援以下三類認證:基本認證、SSL 認證以及摘要認證

基本認證有賴於作為清除文字發送的使用者名稱與密碼清單。SSL 方法要求瀏覽器擁有使用者證書,該證書中需包含使用者公開金鑰以及其他使用者資訊,如名稱、電子郵箱等。摘要認證使用加密技術來加密使用者的憑證。

下面描述了基於 ACL 之存取控制模型的主要功能:

而且,Sun ONE Web Server 6.1 SSL 引擎支援外部加密硬體卸載 SSL 處理程序並提供選擇性的防竄改金鑰儲存區。

如需有關存取控制和使用外部加密硬體的更多資訊,請參閱第 9 章「控制對伺服器的存取」


基於 J2EE/Servlet 的存取控制簡介

在「Sun ONE Web Server 6.1 Programmer's Guide to Web Applications 」中,對基於 J2EE/Servlet 的存取控制進行了詳細描述。下列小節簡要概述了主要概念。

Sun ONE Web Server 6.1 除了提供基於 ACL 的認證之外,還會利用 J2EE 1.3 規格中定義的安全模型以提供數種功能來協助您開發與部署安全的 Java Web 應用程式。

基於 J2EE 的典型 Web 應用程式由下列部分組成,存取這些部分會受到限制:

基於 J2EE/Servlet 的存取控制架構有賴於安全性範圍的使用。當使用者嘗試使用 Web 瀏覽器存取應用程式中的存取保護部分時,Web 容器會提示使用者提供憑證資訊,然後會將此資訊傳送至該特殊應用程式之目前作用的安全性服務範圍內以進行驗證。

下面描述了基於 J2EE/Servlet 之存取控制模型的主要功能:

下列小節簡要解釋了安全性範圍這一概念。如需有關基於 J2EE 安全模型和安全性範圍之認證的更全面論述,請參閱「Sun ONE Web Server 6.1 Programmer's Guide to Web Applications」。


基於範圍的安全性

基於 J2EE 的安全模型提供用於識別和認證使用者的安全性範圍。可以從基本安全性範圍內取得使用者資訊。基於範圍的安全性由以下兩方面組成:

基於範圍的使用者認證

該認證程序會透過基本範圍對使用者進行驗證,又稱為安全性領域。每個範圍都是由一組使用者、選擇性的群組對映以及用於驗證認證請求的認證邏輯組成。一旦認證請求通過配置範圍的驗證,並建立起安全性環境範圍,便會將該身份套用於所有後續授權決策,除非被 run-as 條件否決。

一個伺服器實例可以具有任意數量的配置範圍。配置資訊位於 server.xml 檔案中的 AUTHREALM 元素內。

在 Sun ONE Web Server 中,認證服務是使用能夠提供可插接式安全性領域的 JAAS 建立的。Sun ONE Web Server 6.1 中的 Java 認證範圍與 Sun ONE Application Server 7.0 中的範圍相容。

Sun ONE Web Server 6.1 提供下列範圍:

LDAP 範圍

ldap 範圍可讓您使用 LDAP 資料庫取得使用者安全資訊。每項 LDAP 目錄服務都是具有唯一識別碼的屬性集合。ldap 範圍對於生產系統部署而言最為理想。

為了使用 ldap 範圍進行使用者認證,必須在您的 LDAP 目錄中建立所需的使用者。您可以從 [Administration Server] 的 [Users & Groups] 標籤下執行該作業,或者從 LDAP 目錄產品的使用者管理主控台來執行該作業。如需更多資訊,請參閱在基於 LDAP 的認證資料庫中建立新使用者

file 範圍

file 範圍是首次安裝 Sun ONE Web Server 時的預設範圍。該範圍的設定非常簡便,為開發人員提供了巨大的方便。

file 範圍會根據文字檔中儲存的使用者資料對使用者進行認證。file 範圍支援以下認證資料庫:

如需有關各種基於檔案的認證資料庫之更多資訊,請參閱「<增加>」。

file 範圍所使用的使用者資訊檔案開始是空的,因此,必須首先增加使用者,然後才能使用 file 範圍。如需關於如何執行此動作的更多資訊,請參閱在基於檔案的認證資料庫中建立新使用者

Solaris 範圍

solaris 範圍可讓您同時使用 Solaris 使用者名稱與密碼資料來進行認證。只有 Solaris 9 支援此範圍,因為它會使用 Solaris 9 作業環境中的使用者資料庫,從而免去了設定單獨資料庫的其他步驟。

證書範圍

證書範圍支援 SSL 認證。證書範圍會在 Sun ONE Web Server 的安全性環境範圍內設定使用者身份,並在該身份內移入用戶端證書中的使用者資料。然後,J2EE 容器將透過使用者證書中的 DN 執行授權處理。該範圍會透過 X.509 證書認證具有 SSL 或 TLS 用戶端認證的使用者。

如需有關如何設定伺服器與用戶端證書的詳細資訊,請參閱第 6 章「使用證書和金鑰」

自訂範圍

您可以為其他資料庫建立範圍,如 Oracle,以便透過使用可插接式 JAAS 登入模組並執行範圍來滿足特殊需求。請注意,用戶端 JAAS 登入模組不適於與 Sun ONE Web Server 配合使用。

請將 Sun ONE Web Server 6.1 中的範圍範例作為參考範本。

本端範圍

本端範圍是一個特殊的範圍,它可以提供基於核心 ACL 的認證模型與基於 J2EE/Servlet 的認證模型之間的橋接器。透過使用適用於 Java Web 應用程式的本端範圍,可以使 ACL 子系統執行認證 (而不是讓 Java Web 容器執行該作業),也可以使該身份用於 Java Web 應用程式。

呼叫認證作業時,本端範圍會將此認證授權給核心認證子系統。例如,從使用者角度來看,此項作業實質上等同於 LDAP 範圍將認證授權給已配置的 LDAP 伺服器。當本端範圍處理群組成員關係查詢時,也會將這些查詢授權給核心認證子系統。從 Java Web 模組和開發人員角度來看,本端範圍與其他任何同 Web 模組配合工作的 Java 範圍沒有絲毫差異。

由於本端範圍會將認證授權給核心認證子系統,因此,需要進行額外的配置。如需更多資訊,請參閱配置本端範圍

「Sun ONE Web Server 6.1 Programmer's Guide to Web Applications」詳細論述了 J2EE 安全性範圍以及配置安全性範圍可使用的配置參數。

基於角色的授權

Java Servlet 2.3 規格定義了如何建立存取控制規則,以限制對各種 J2EE 應用程式資源的存取。

將角色與受限區域對映起來

J2EE 存取控制以角色為基礎。若要限制存取特定的 HTML 頁、Servlet 以及 JSP 等等,您必須定義以下項目:

使用者可以擔當多重角色,他們一旦通過驗證並被指定至少一種角色時,便可以存取相應的區域。

webapps/security 目錄下的範例用作範本,該範例在 Sun ONE Web Server 6.1 中具有多種存取限制。如需更多有關基於 Servlet 角色之安全性的論述,請參閱 Servlet 2.3 規格。

依角色定義存取控制

J2EE 應用程式角色為抽象的概念,並套用至特定應用程式。若要在僅取得授權的使用者才可進行存取的真實環境中執行應用程式,必須將使用者名稱對映至 sun-web.xml 描述元中的角色。使用以下兩種方法中的全部或其中一種:

委託人對映 — 直接將一個或多個使用者名稱對映至 sun-web.xml 中的角色。此方法便於測試,但是對映於每個角色的使用者數量必須保持在一定範圍之內。

群組對映 — 透過 sun-web.xml 中的一個或多個群組間接對映一個或多個使用者名稱。(例如,群組名稱可以是工程師、經理或員工。)然後,所列群組中所有通過認證的使用者都會被指定一個應用程式角色。請注意,作用中範圍的執行 (或參照的資料庫) 負責決定哪些使用者屬於給定的群組。

當委託人 (使用者) 請求一項特殊的 Web 資源時 (例如,一個 servlet 或 JSP),Web 容器便會檢查部署描述元檔案中的安全限制條件或資源的相關許可權利以確定該委託人是否有權存取此資源。

角色對映項目會將角色對映至模組描述元中的使用者或群組。範例:

<sun-web-app>

  <security-role-mapping>

  <role-name>manager</role-name>

  <principal-name>jsmith</principal-name>

  <group-name>divmanagers</group-name>

  </security-role-mapping>

</sun-web-app>

如需有關部署描述元檔案的更多資訊,請參閱「Sun ONE Web Server 6.1 Programmer's Guide to Web Applications」。


如何配置範圍

您可以使用下列方法之一來配置範圍:

使用管理介面

使用管理介面配置範圍:

  1. 從 [Administration Server] 介面中存取您要管理的伺服器實例,然後按一下 [Java] 標籤。
  2. 按一下 [Security Realms] 連結。
  3. 依預設,將提供以下範圍:

    - file

    - native

    - ldap

  4. 若要增加範圍,請按一下 [New] 按鈕。若要刪除範圍,請核取範圍名稱旁邊的核取方塊,然後按一下 [OK]。若要編輯範圍,請按一下範圍名稱。
  5. 如果要增加或編輯某個範圍,請輸入該範圍的名稱、類別名稱、特性以及使用者 (僅用於 file 範圍),然後按一下 [OK] 按鈕。
  6. 按一下 [OK]。

編輯 server.xml 檔案

在後台,於 server.xml 檔案中的 SECURITY 元素內設定預設範圍。SECURITY 配置如下所示:

<SECURITY defaultrealm="file" anonymousrole="ANYONE"
      audit="false">
   <AUTHREALM name="file"
         classname="com.iplanet.ias.security.auth.realm.file.FileRealm">
      <property name="file" value="instance_dir/config/keyfile"/>
      <property name="jaas-context" value="fileRealm"/>
   </AUTHREALM>
   ...
</SECURITY>

defaultrealm 屬性指向預設的伺服器使用範圍。所有尚未在其 web.xml 中提供有效範圍的 Web 應用程式都可使用預設範圍。預設範圍必須指向某個已配置的 AUTHREALM 名稱。預設範圍為 file 範圍。

audit 旗標將決定是否要記錄稽核資訊。如果設定為 true,則伺服器便會記錄所有認證與授權事件的稽核訊息。

如果變更了範圍配置,則必須重新啟動伺服器以使變更生效。

如需有關 server.xml 檔案的更多資訊,請參閱「Sun ONE Web Server 6.1 Administrator's Configuration File Reference」。

配置本端範圍

正如使用所有範圍一樣,您可以使用 server.xml 檔案中 SECURITY 元素內的 AUTHREALM 元素來配置本端範圍。範例:

<AUTHREALM name="native" classname="com.sun.enterprise.security.auth.realm.webcore.NativeRealm">

<PROPERTY name="auth-db" value="mykeyfile" />

<PROPERTY name="jaas-context" value="nativeRealm"/>

</AUTHREALM>

auth-db 特性將指向核心認證資料庫,此本端範圍實例會把所有認證請求授權給該資料庫。在此範例中,認證資料的名稱為「mykeyfile」。此特性是選擇性的。如果未指定,核心認證引擎會使用 default auth-db 來處理所有來自於此本端範圍的請求。與在多數範圍中一樣,jaas-context 特性是將要使用的 JAAS 登入環境範圍的指標 (定義於 login.conf)。

本端範圍不需要進行其他配置。然而,由於請求被授權給核心認證資料庫,因此,還必須對該特殊認證資料庫進行特性配置。本節的其餘部分提供配置核心認證資料庫的範例。

若要配置核心 (本端) 認證資料庫,則在 server.xml 中,VS 元素必須含有可將 auth-db 名稱與資料庫名稱相對應的 USERDB 元素。例如︰

<VS id="https-plaza.com" ....

....

  <USERDB id="mykeyfile" database="myalt"/>

....

</VS>

請注意,如果未給定 auth-db 特性 (在此情況下使用「default」),您可能擁有將 id="default" 對映至某個資料庫名稱的 USERDB 項目。如果沒有進行對映,則對映將為 default

接下來,檔案 install-root/userdb/dbswitch.conf 必須含有 myalt 資料庫的配置。以下範例將 myalt 定義為基於檔案的認證資料庫。

directory myalt file

myalt:syntax keyfile

myalt:keyfile /local/ws61/https-plaza.com/config/keyfile

以上配置並非特定於本端範圍。任何有效認證目錄配置均可被本端範圍用作目標認證資料庫。這意味著可以對本端範圍進行配置,以便授權給本端 LDAP 認證資料庫,甚至授權給自訂本端認證資料庫。


備註

在 Sun ONE Web Server 6.1 中,Web 應用程式有兩種不同的機制可以用來將 LDAP 用作認證引擎:

  • 使用 Java LDAP 範圍
  • 使用已配置的 Java 本端範圍以授權給本端 LDAP 認證資料庫。


指定預設範圍

預設範圍用於處理所有 Web 應用程式的認證事件,這些應用程式不會在其 web.xml 部署描述元檔案中指定有效的替代範圍。若要為伺服器實例指定作用的認證範圍,請執行下列步驟:

  1. 存取 [Server Manager] 並選擇 [Java] 標籤。
  2. 按一下 [Java Security] 連結。
  3. 設定下列資訊:
    • 預設範圍。為該伺服器實例指定作用的認證範圍 (一個 AUTHREALM 名稱屬性)。
    • 匿名角色 (可選)。作為預設名稱或匿名角色名稱來使用。
    • 啟用稽核 (可選)。如果啟用了此項功能,便會執行其他存取記錄以提供稽核資訊。稽核資訊由以下內容組成:
      • 認證成功事件與認證失敗事件
      • 授予存取 Servlet 和拒絕存取 Servlet
    • 日誌層級 (可選)。控制記錄到錯誤日誌的訊息類型。
  4. 按一下 [OK]。


使用程式化安全性

除了由範圍提供的容器管理式認證之外,Sun ONE Web Server 6.1 還支援透過程式化登入介面存取的管理認證。該介面支援不適合範圍基礎架構的自訂認證模型。J2EE 應用程式也可以使用程式化登入來直接建立其認證環境範圍。但是,該作業會使應用程式不太容易維護或攜帶,因此,不建議這樣做。

必須要有 ProgrammaticLoginPermission 許可權才能啟動用於應用程式的程式化登入機制。依預設,沒有將該許可權授予已部署的應用程式,因為此機制並非標準的 J2EE 機制。

Sun ONE Web Server 6.1 支援安全性管理員。依預設,當您首次安裝伺服器時,安全性管理員處於停用狀態。如果您在伺服器實例中啟用了 Java 安全性管理員,便需要將此許可權授予所有將使用程式化登入的 Web 應用程式。

若要將必需的許可權授予應用程式,需要編輯 server.policy 檔案。

您可以透過在 server.xml 檔案中指定標準的 Java 策略項目來啟用策略支援:

<JVMOPTIONS>-Djava.security.manager</JVMOPTIONS>

<JVMOPTIONS>-Djava.security.policy=install-root/https-servername/config/server.policy</JVMOPTIONS>

如需有關 server.policy 檔案的更多詳細資訊,請參閱「Sun ONE Web Server 6.1 Programmer's Guide to Web Applications」。


決定何時使用 J2EE/Servlet 認證模型

本節旨在協助您瞭解在什麼情況下使用基於 J2EE/Servlet 的認證模型。

使用 J2EE/Servlet 認證模型:

則請記住,即使您使用基於 ACL 的基礎架構,仍然可以選擇使用本端範圍 Java 範圍來傳輸使用者身份,這樣,Servlet 便可以使用該身份。



上一個      目錄      索引      下一個     


Copyright 2004 Sun Microsystems, Inc. 。版權所有。