迁移 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 调用),并标识缺省许可权集合或策略。应用程序代码没有特权,并且服从策略文件中定义的许可权。要支持 Java 2 安全性,doPrivileged 检测是重要而且必需的。没有它,应用程序代码必须被授予服务器运行时所需的许可权。这种情况是由于 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 安全策略是自由的。

更改的内容

Java 2 安全性在 WebSphere Application Server 中完全受支持,这意味着将执行所有许可权。企业应用程序的缺省 Java 2 安全策略是建议的许可权集合(由 Java Platform, Enterprise Edition (Java EE) V1.4 规范定义)。请参阅 profile_root/config/cells/cell_name/nodes/node_name/app.policy 文件,以了解授予企业应用程序的缺省 Java 2 安全策略。与前发行版比较,此策略要严格得多。

所有策略是声明性的。产品安全管理器支持策略文件中声明的所有策略。此规则有个例外:拒绝企业应用程序访问 profile_root/config/cells/cell_name/filter.policy 文件中声明的许可权。

注:WebSphere Application Server V9.0 中,企业应用程序的缺省 Java 2 安全策略更严格,并且执行所有许可权。因为应用程序代码在系统资源(如,文件 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 安全策略迁移至 V9.0。对于 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 策略文件自动迁移至 V9.0 的简单方法。手动复制企业应用程序的 Java 2 安全策略到 was.policapp.policy 文件。但是,因为使用的是符号或相对代码库,而不是绝对代码库,所以最好是将 Java 2 安全策略迁移到 was.policy 文件。这样做有很多好处。将 was.policy 文件中定义的许可权仅授予特定企业应用程序,而 app.policy 文件中的许可权应用到在 app.policy 文件所属节点上运行的所有企业应用程序。

请参阅Java 2 安全策略文件主题,以了解有关策略管理的更多详细信息。

以下示例描述从前发行版迁移 Java 2 安全策略。内容包括 app1.ear 企业应用程序的 Java 2 安全策略文件和系统许可权(即授予 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、企业 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";
       };

    以上代码样本中的第三和第四行分成两行显示仅为了便于说明。

    was.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 安全性的已迁移企业应用程序进行沙箱测试。请参阅受 Java 2 安全性保护的开发者工具箱 API,获取有关 Java 2 安全性保护哪些 API 的信息。如果您使用第三方库,请查询供应商文档,获取受 Java 2 安全性保护的 API。验证是否已对应用程序授予所有必需的许可权,否则启用 Java 2 安全性后,它可能无法运行。
  5. 对启用了 Java 2 安全性的已迁移企业应用程序执行试生产测试。 在试生产测试环境中使用以下跟踪字符串对 WebSphere Application Server Java 2 安全管理器启用跟踪:com.ibm.ws.security.core.SecurityManager=all=enabled。此跟踪有助于调试未授予应用程序必需的许可权或系统代码未正确标记为有特权时产生的 AccessControlException 异常。当产生异常时,跟踪转储堆栈跟踪和授予调用堆栈中类的许可权。

    有关更多信息,请参阅Java 2 安全性的访问控制异常

    注: 因为 Java 2 安全策略比前发行版要严格得多,所以管理员或部署者必须查看其企业应用程序,以查看启用 Java 2 安全性前是否需要额外许可权。如果未授予企业应用程序必需的许可权,它们无法运行。

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_migratejava2sec
文件名:tsec_migratejava2sec.html