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 Server 安全性

您可以通过多种安全服务和机制(包括验证、授权和访问控制)来保护驻留在 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 提供的一种区域是 Native 区域,它在这两种安全模式之间架起了一座桥梁。

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 的用户授予对特定文件夹 misc权限。

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 方法要求浏览器具有用户证书,证书中包含该用户的公共密钥和其他用户信息(例如名称、Email 等)。摘要验证使用加密技术对用户证书进行加密。

下面介绍基于 ACL 的访问控制模式的主要功能:

此外,Sun ONE Web Server 6.1 SSL 引擎还支持外部加密硬件,以卸载 SSL 处理和提供可选的防篡改密钥存储。

有关访问控制和使用外部加密硬件的详细信息,请参见第 9 章“控制对服务器的访问”


基于 J2EE/Servlet 的访问控制概述

基于 J2EE/Servlet 的访问控制将在 Sun ONE Web Server 6.1 Programmer's Guide to Web Applications 中详细介绍。下面只简单介绍其中的关键概念。

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 建立的,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 操作环境中的用户数据库,它能够减少设置单独数据库的额外步骤。

Certificate 区域

certificate 区域支持 SSL 验证。certificate 区域在 Sun ONE Web Server 的安全性上下文中设置用户身份,并将其与客户机证书的用户数据总装在一起。然后,J2EE 容器将基于证书中每个用户的 DN 处理授权进程。此区域使用 SSL 或 TLS 客户机验证并通过 X.509 证书来验证用户。

有关如何设置服务器和客户机证书的详细信息,请参见第 6 章“使用证书和密钥”

Certificate 区域

您可以通过可插接式 JAAS 登录模块和区域实现为其他数据库(如 Oracle)建立区域,以满足您的特定需要。请注意,客户端 JAAS 登录模块不适用于 Sun ONE Web Server。

请参见 Sun ONE Web Server 6.1 中的样例区域作为模板。

Native 区域

Native 区域是一个特殊的区域,它为基于 ACL 的核心验证模式和 J2EE/Servlet 验证模式提供了联系桥梁。通过将 Native 区域用于 Java Web 应用程序,可以让 ACL 子系统执行验证(而不是让 Java Web 容器执行),并且使此身份可以用于 Java Web 应用程序。

当调用验证操作时,Native 区域会将此验证委派给核心验证子系统。从用户的角度来看,这实际上相当于 LDAP 区域将验证委派给已配置的 LDAP 服务器。当 Native 区域处理组成员关系查询时,也被委派给核心验证子系统。对于 Java Web 模块和开发者而言,Native 区域与任何其他可用于 Web 模块的 Java 区域没有什么区别。

因为 Native 区域将验证委派给核心验证子系统,所以需要一些附加的配置。有关详细信息,请参见“配置 Native 区域”。

Sun ONE Web Server 6.1 Programmer's Guide to Web Applications 详细介绍了 J2EE 安全区域和可以用来配置安全区域的配置参数。

基于角色的授权

Java Servlet 2.3 规范定义了如何建立访问控制规则,用以限制对各种 J2EE 应用程序资源的访问。

将角色映射到受限制的区域

J2EE 访问控制建立在角色的基础上。要限制对特定 HTML 页面、Servlet 和 JSP 等的访问,必须定义以下内容:

用户可以担任多个角色,在验证至少为他们分配了一个角色后,便允许他们访问相应的区域。

请使用 Sun ONE Web Server 6.1 的 webapps/security 目录中带有各种访问限制的样例作为模板。有关基于 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>

</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

配置 Native 区域

与配置所有区域一样,您可以使用 server.xmlSECURITY 元素中的 AUTHREALM 元素来配置 Native 区域。示例:

<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 特性指向核心验证数据库,该 Native 区域实例会将所有验证请求委派给该数据库。在本实例中,该验证数据库名为“mykeyfile”。此特性可选。如果未指定属性,核心验证引擎将使用 default auth-db 处理来自此 Native 区域的所有请求。在多数区域中,jaas-context 特性是指向要使用的 JAAS 登录上下文的指针(在 login.conf 中定义)。

Native 区域不需要其他配置。但是,由于将请求委派给了核心验证数据库,因此该特定验证数据库还必须是已配置的特性。下面将举例说明如何配置核心验证数据库。

要配置核心 (native) 验证数据库,server.xml 中的 VS 元素必须包含 USERDB 元素,该元素可将 auth-db 名称映射到数据库名称。例如:

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

....

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

....

</VS>

请注意,如果未给定 auth-db 特性(这种情况下使用“default”),则 USERDB 项会将 id="default" 映射到某个数据库名称。如果不存在映射,则映射到 default

其次,文件 install-root/userdb/dbswitch.conf 必须包含 myalt 数据库的配置。以下示例将 myalt 定义为基于文件的验证数据库。

directory myalt file

myalt:syntax keyfile

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

以上配置并非专用于 Native 区域。任何有效的验证目录配置都可以用作 Native 区域的目标验证数据库。这意味着 Native 区域可以配置为委派给本地 LDAP 验证数据库,甚至是自定义的本地验证数据库。


在 Sun ONE Web Server 6.1 中,Web 应用程序有两种将 LDAP 用作验证引擎的不同机制:

  • 使用 Java LDAP 区域
  • 使用配置为委派给本地 LDAP 验证数据库的 Java 本地区域。


指定缺省区域

缺省区域将用于处理所有在 web.xml 部署描述符文件中未指定有效替代区域的 Web 应用程序中的验证事件。要为服务器实例指定活动的验证区域,请执行以下步骤:

  1. 访问 Server Manager 并选择“Java”选项卡。
  2. 单击“Java Security”链接。
  3. 设置以下信息:
    • Default Realm。为该服务器实例指定活动的验证区域(AUTHREALM 名称属性)。
    • Anonymous Role(可选)。用作缺省或匿名角色的名称。
    • Audit Enabled(可选)。如果为 true,将执行附加的访问记录以提供审核信息。审核信息包括以下内容:
      • 验证成功或失败的事件
      • 同意或拒绝 Servlet 访问
    • Log Level(可选)。控制记录到错误日志的消息类别。
  4. 单击“OK”。


使用程序安全性

除了由区域提供的容器管理验证以外,Sun ONE Web Server 6.1 还支持通过程序化登录界面访问的管理验证。此界面支持不适用于区域基础结构的自定义验证模式。J2EE 应用程序也可以使用程序化登录直接为自己建立验证上下文。但是,这种方式不便于应用程序的移植和维护,因此建议不要使用。

调用应用程序的程序化登录机制需要 ProgrammaticLoginPermission 权限。缺省情况下,此权限不会授予部署的应用程序,因为这不是标准的 J2EE 机制。

Sun ONE Web Server 6.1 支持 Security Manager。首次安装服务器时,将缺省禁用 Security Manager。如果在服务器实例中启用了 Java Security Manager,则需要将此权限授予要使用程序化登录的任何 Web 应用程序。

要为应用程序授予所需的权限,您需要编辑 server.policy 文件。

通过在 server.xml 文件中指定标准的 Java 策略项,您可以启用策略支持。

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

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

有关 server.policy 文件的详细信息,请参见 Sun ONE Web Server 6.1 Programmer's Guide to Web Applications。


决定何时使用 J2EE/Servlet 验证模式

本部分介绍应在哪些情况下使用基于 J2EE/Servlet 的验证模式。

在以下情况下,请使用 J2EE/Servlet 验证模式:

请记住,即使使用基于 ACL 的基础结构,您仍可以使用 Native 区域 Java 区域传输用户标识,使其可用于 Servlet。



上一个      目录      索引      下一个     


版权所有 2004 Sun Microsystems, Inc.。保留所有权利。