移轉 Java 2 安全原則

如需移轉 Java™ 2 安全原則的相關指引,請使用本主題。

關於這項作業

舊版 WebSphere® Application Server

WebSphere Application Server 在伺服器執行時期使用 Java 2 安全管理程式,以防止企業應用程式呼叫 System.exit 和 System.setSecurityManager 方法。 如果企業應用程式呼叫這兩個 Java 應用程式設計介面 (API) ,則會產生不想要的結果。 例如, System.exit API 會導致 Java 虛擬機器 (應用程式伺服器程序) 提早結束,這對應用程式伺服器來說不是有益的作業。

如果要適當支援 Java 2 安全,所有伺服器執行時期都必須標示為privileged(在正確位置插入 doPrivileged API 呼叫) ,並識別預設許可權集或原則。 應用程式碼不是特許程式碼,且受限於原則檔中定義的許可權。 doPrivileged 檢測是支援 Java 2 安全的重要且必要。 如果沒有它,應用程式碼必須被授與伺服器執行時期所需的許可權。 此狀況是由於 Java 2 安全用來施行許可權檢查的設計和演算法所造成。 請參閱 Java 2 安全檢查許可權演算法。

WebSphere Application Server的 Java 2 安全管理程式 (寫在程式中) 會施行下列兩個許可權:
  • java.lang.RuntimePermission(exitVM)
  • java.lang.RuntimePermission(setSecurityManager)

不論 Java 2 安全原則中的內容為何,都會拒絕應用程式碼存取這些許可權。 不過,伺服器執行時期會獲授與這些許可權。 不會施行所有其他許可權檢查。

僅支援兩個許可權:
  • java.net.SocketPermission
  • java.net.NetPermission

不過,並非所有產品伺服器執行時期都適當標示為特許。 您必須授與應用程式碼所有先前列出的其他許可權,否則企業應用程式可能無法執行。 企業應用程式的這個 Java 2 安全原則不拘。

變更內容

WebSphere Application Server完全支援「Java 2 安全」,這表示已施行所有許可權。 企業應用程式的預設 Java 2 安全原則是 Java Platform, Enterprise Edition (Java EE) 1.4 規格所定義的建議許可權集。 請參閱profile_root/config/cells/cell_name/nodes/node_name/app.policy授權給企業應用程式之預設 Java 2 安全原則的檔案。 與舊版相比,此原則更嚴格。

所有原則都是宣告式。 產品安全管理程式允許使用原則檔中所宣告的所有原則。 此規則有一個例外: 企業應用程式被拒絕存取在中宣告的許可權profile_root/config/cells/cell_name/filter.policy檔案。

附註: 企業應用程式的預設 Java 2 安全原則更嚴格,且所有許可權都在 WebSphere Application Server 8.5中施行。 安全原則可能會失敗,因為應用程式碼未授與必要的許可權,其中系統資源 (例如檔案 I/O) 可以程式化方式存取,且現在受限於許可權檢查。

在應用程式碼中,請勿使用 setSecurityManager 許可權來設定安全管理程式。 當應用程式使用 setSecurityManager 許可權時,與 WebSphere Application Server內的內部安全管理程式發生衝突。 如果您必須針對 RMI 目的在應用程式中設定安全管理程式,也必須在 WebSphere Application Server 管理主控台內的「廣域安全」頁面上啟用 使用 Java 2 安全來限制應用程式存取本端資源 選項。 WebSphere Application Server 接著會登錄安全管理程式。 應用程式碼可以使用 System.getSecurityManager() 應用程式設計介面 (API) 來驗證此安全管理程式是否已登錄。

移轉系統內容

下列系統內容用於與 Java 2 安全相關的舊版中:
  • java.security.policy. 原則檔的絕對路徑 (需要採取動作)。 這個系統內容同時包含系統許可權 (授與 Java 虛擬機器 (JVM) 和產品伺服器執行時期的許可權) 和企業應用程式許可權。 將企業應用程式的 Java 2 安全原則移轉至 8.5。 對於 Java 2 安全原則移轉,請參閱移轉 Java 2 安全原則的步驟。
  • enableJava2Security. 用來啟用 Java 2 安全強制執行 (不需要任何動作)。 這個系統內容已淘汰; WebSphere 配置應用程式設計介面 (API) 中的旗標用來控制是否啟用 Java 2 安全。 請透過管理主控台來啟用這個選項。
  • was.home. 展開至 WebSphere Application Server 的安裝目錄 (可能需要採取動作)。 此系統內容已淘汰; 已由 ${user.install.root} 和 ${was.install.root} 內容取代。 如果目錄包含實例特定的資料,則會使用 ${user.install.root} ; 否則會使用 ${was.install.root} 。 針對 WebSphere Application ServerWebSphere Application Server Network Deployment 環境,可交換使用這些內容。 請參閱移轉 Java 2 安全原則的步驟。

移轉 Java 2 安全原則

由於同一原則檔中混合了系統許可權及應用程式許可權,因此無法輕鬆將 Java 原則檔自動移轉至 8.5 。 手動將企業應用程式的 Java 2 安全原則複製到was.policyapp.policy檔案。 不過,將 Java 2 安全原則移轉至was.policy因為使用符號或相對程式碼庫,而不是絕對程式碼庫,所以最好使用檔案。 這個程序有許多優點。 授與在中定義的許可權was.policy僅限特定企業應用程式,而在中的許可權app.policy檔案套用至在節點上執行的所有企業應用程式app.policy檔案屬於。

如需原則管理的詳細資料,請參閱 Java 2 安全原則檔 主題。

下列範例說明從舊版移轉 Java 2 安全原則。 內容包括的 Java 2 安全原則檔app1.ear企業應用程式和系統許可權,它們是授與 Java 虛擬機器 (JVM) 和產品伺服器執行時期的許可權。

[AIX Solaris HP-UX Linux Windows][z/OS]Java 2 安全原則檔的預設位置為profile_root/properties/java.policy. 為了明確起見,省略預設許可權:

[IBM i]Java 2 安全原則檔的預設位置為profile_root/properties/java.policy. 為了明確起見,省略預設許可權:

// For product Samples
   grant codeBase "file:${app_server_root}/installedApps/app1.ear/-" {
     permission java.security.SecurityPermission "printIdentity";
     permission java.io.FilePermission "${app_server_root}${/}temp${/}somefile.txt", 
       "read";
   };

為了清楚說明,在此範例中,所有許可權都會移轉為應用程式層次許可權。 不過,您可以在元件層次 (Web、Enterprise Bean、連接器或公用程式 Java 保存檔 (JAR) 元件層次) 授與許可權,也可以授與許可權給特定元件。

程序

  1. 確定應用程式伺服器上已停用 Java 2 安全。
  2. 建立新的was.policy檔案 (如果檔案不存在) ,或更新was.policy配置儲存庫中已移轉應用程式的檔案,其內容如下:
    grant codeBase "file:${application}" {
         permission java.security.SecurityPermission "printIdentity";
         permission java.io.FilePermission "
                 ${user.install.root}${/}temp${/}somefile.txt", "read";
       };

    前一個程式碼範例中的第三行和第四行以兩行呈現,僅供說明之用。

    Thewas.policy檔案位於profile_root/config/cells/cell_name/applications/app.ear/deployments/app/META-INF/目錄。

  3. 使用組合工具來連接was.policy檔案至企業保存檔 (EAR)。

    您也可以使用組合工具來驗證was.policy檔案。 如需相關資訊,請參閱 配置 Java 2 安全的 was.policy 檔

  4. 驗證企業應用程式不需要已移轉 Java 2 安全許可權的其他許可權,以及在中宣告的預設許可權集。${user.install.root}/config/cells/cell_name/nodes/node_name/app.policy檔案。 這項驗證需要在前置正式作業環境中啟用 Java 2 安全的情況下,對已移轉的企業應用程式進行程式碼檢閱、程式碼檢驗、應用程式說明文件檢閱及沙盤推演測試。 如需哪些 API 受到 Java 2 安全保護的相關資訊,請參閱受 Java 2 安全保護的開發者套件 API。 如果您使用協力廠商程式庫,請參閱供應商說明文件,以取得受 Java 2 安全保護的 API。 請驗證應用程式已獲授與所有必要的許可權,或在啟用 Java 2 安全時可能無法執行。
  5. 在啟用 Java 2 安全的情況下,對移轉的企業應用程式執行前置正式作業測試。
    使用下列追蹤字串,在前置正式作業測試環境中啟用 WebSphere Application Server Java 2 安全管理程式的追蹤:com.ibm.ws.security.core.SecurityManager=all=enabled. 此追蹤功能有助於對未授與必要許可權或部分系統程式碼未適當標示為特許時所建立的 AccessControl異常狀況進行除錯。 建立異常狀況時,追蹤會傾出堆疊追蹤及授與呼叫堆疊上類別的許可權。

    如需相關資訊,請參閱 Java 2 安全的存取控制異常狀況

    附註: 由於 Java 2 安全原則比舊版更嚴格,管理者或部署人員必須檢閱其企業應用程式,以查看在啟用 Java 2 安全之前是否需要額外的許可權。 如果未授與必要的許可權給企業應用程式,則它們無法執行。