安全性是有关数据保护的功能:在存储和传输数据时如何防止对数据进行未经授权的访问或破坏。Application Server 具有基于 J2EE 标准的动态可扩展安全体系结构。内置了多种安全功能,包括密码学、验证和授权以及公共密钥基本结构。Application Server 是基于 Java 安全模型构建的,该安全模型使用沙箱,应用程序可以在沙箱中安全地运行,而不会给系统或用户带来潜在的危险。本节介绍了以下主题:
从宽泛意义上讲,应用程序安全性有两种:
在程序安全性中,开发者编写的应用程序代码负责处理安全性事务。作为管理员,您对这一安全机制没有任何控制权。由于程序安全性将安全配置硬编码到应用程序中而不是通过 J2EE 容器对其进行管理,因此这种程序安全性的功能常常受到限制。
在声明安全性中,容器 (Application Server) 通过应用程序的部署描述符处理安全性事务。您可以通过直接编辑部署描述符或使用 deploytool 等工具来控制声明安全性。由于可以在完成应用程序开发之后更改部署描述符,因此声明安全性具有更大的灵活性。
除了应用程序安全性以外,还有影响 Application Server 系统中所有应用程序的系统安全性。
程序安全性受应用程序开发者的控制,因此本文档不对其进行讨论;声明安全性受应用程序开发者的控制要少一些,本文档中只偶尔涉及到声明安全性。本文档主要针对系统管理员,因此主要讲述了系统安全性。
Application Server 提供了以下用于管理安全性的工具:
管理控制台,它是一种基于浏览器的工具,用于配置整个服务器的安全性,管理用户、组和领域以及执行系统范围内的其他安全性任务。有关管理控制台的一般介绍,请参见管理工具。有关使用管理控制台可以执行的安全性任务的概述,请参见使用管理控制台管理安全性。
asadmin,一个命令行工具,可以执行管理控制台能够执行的许多任务。您还可以使用 asadmin 执行某些使用管理控制台无法执行的任务。您可以从命令提示符或脚本执行 asadmin 命令,以自动执行重复任务。有关 asadmin 的一般介绍,请参见管理工具。
deploytool,一个图形形式的封装和部署工具,用于编辑应用程序部署描述符,从而控制各个应用程序的安全性。由于 deploytool 主要针对应用程序开发者,因此本文档未详细介绍如何使用该工具。有关使用 deploytool 的说明,请参见该工具的联机帮助以及位于 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html 上的《The J2EE 1.4 Tutorial》。
Java 2 Platform, Standard Edition (J2SE) 提供了两个用于管理安全性的工具:
keytool,一个命令行实用程序,用于管理数字证书和密钥对。使用 keytool 可以管理 certificate 领域内的用户。
policytool,一个图形实用程序,用于管理系统范围内的 Java 安全策略。作为管理员,您很少会用到 policytool。
有关使用 keytool、policytool 和其他 Java 安全性工具的更多信息,请参见 http://java.sun.com/j2se/1.4.2/docs/tooldocs/tools.html#security 上的 Java 2 SDK Tools and Utilities。
在 Enterprise Edition 中,还可以使用两个实现网络安全服务 (NSS) 的工具来管理安全性。有关 NSS 的更多信息,请访问 http://www.mozilla.org/projects/security/pki/nss/。管理安全性的工具包括:
certutil,一个命令行实用程序,用于管理证书和密钥数据库。
pk12util,一个命令行实用程序,用于以 PKCS12 格式在证书/密钥数据库和文件之间导入和导出密钥及证书。
有关使用 certutil、pk12util 和其他 NSS 安全性工具的更多信息,请参见 http://www.mozilla.org/projects/security/pki/nss/tools 上的 NSS Security 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-dir/config)中,运行以下 asadmin 命令:
asadmin create-password-alias --user admin alias-name |
例如,
asadmin create-password-alias --user admin jms-password |
将显示输入密码提示(在本例中为 admin)。有关更多信息,请参阅 create-password-alias、list-password-aliases 和 delete-password-alias 命令的手册页。
删除并替换 domain.xml 中的密码。使用 asadmin set 命令可以完成此操作。用于此目的的 set 命令的示例如下:
asadmin set --user admin server.jms-service.jms-host. default_JMS_host.admin-password=${ALIAS=jms-password} |
重新启动相关域的 Application Server。
某些文件包含需要使用文件系统权限进行保护的编码密码。这些文件包括:
domain-dir/master-password
此文件包含编码主密码,并且应使用文件系统权限 600 对其进行保护。
任何使用 --passwordfile 参数创建的、作为参数传递给 asadmin 的密码文件均应使用文件系统权限 600 进行保护。
主密码 (MP) 是全局性的共享密码。它从不用于验证,也从不会在网络上传输。此密码是整体安全性的要塞点;用户可以选择在需要时手动输入此密码,也可以将其隐藏在文件中。它是系统中最敏感的数据。用户可以通过删除此文件强制系统提示输入 MP。更改主密码后,系统会将其重新保存到主密码密钥库中。
停止域的 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> |
重新启动 Application Server。
此时,不能启动正在运行的服务器实例并且不能重新启动运行服务器实例,除非已更改这些实例所对应的节点代理上的 SMP。如果在更改服务器实例的 SMP 之前重新启动了该服务器实例,它将无法启动。
一次停止一个节点代理及与其相关的服务器。再次运行 asadmin change-master-password 命令,然后重新启动节点代理及其相关服务器。
继续对下一个节点代理执行此过程,直到对所有节点代理均已执行此过程。这样就可以完成滚动更改。
管理密码安全性中介绍了如何对管理员密码进行加密。强烈建议您对管理员密码进行加密。如果要在加密管理员密码之前更改管理员密码,请使用 asadmin set 命令。用于此目的的 set 命令的示例如下:
asadmin set --user admin server.jms-service.jms-host.default_JMS_host.admin-password=new_pwd |
还可以使用管理控制台更改管理员密码,步骤如下。
在管理控制台树组件中,展开“配置”节点。
选择要配置的实例:
展开“安全性”节点。
展开“区域”节点。
选择 admin-realm 节点。
在“编辑区域”页面中,单击“管理用户”按钮。
选择名为 admin 的用户。
输入新密码并确认密码。
单击“保存”以保存新密码,或单击“关闭”以关闭页面而不保存新密码。
将为以下角色指定安全职责:
应用程序开发者负责:
为应用程序组件指定角色和基于角色的访问限制。
定义应用程序的验证方法并指定受保护的应用程序部分。
应用程序开发者可以使用 deploytool 等工具来编辑应用程序部署描述符。《The J2EE 1.4 Tutorial》中的 "Security" 一章详细介绍了这些安全性任务,您可以通过以下 URL 查看该教程:http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html。
应用程序部署者负责:
将用户或组(或两者)映射到安全角色。
限制访问组件方法所需的权限,使满足特定部署方案的要求。
应用程序部署者可以使用 deploytool 等工具来编辑应用程序部署描述符。《The J2EE 1.4 Tutorial》中的 "Security" 一章详细介绍了这些安全性任务,您可以通过以下 URL 查看该教程:http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html。
系统管理员负责:
配置安全区域。
管理用户帐户和组。
管理审计日志。
管理服务器证书,并配置服务器对安全套接字层 (Secure Socket Layer, SSL) 的使用。
处理系统范围内的其他安全性功能,例如连接器连接池的安全映射、其他 JACC 提供者等等。
系统管理员使用管理控制台来管理服务器安全性设置,并使用 certutil 来管理证书。本文档主要针对系统管理员。