Sun Java 徽标     上一页      目录      索引      下一页     

Sun 徽标
Sun[TM] Identity Manager 8.0 管理 

第 12 章
安全

本章介绍有关 Identity Manager 安全功能的信息,并详述为进一步减少安全风险可以采取的步骤。

请查看以下主题以了解有关使用 Identity Manager 管理系统安全的更多信息。


安全功能

Identity Manager 通过提供以下功能帮助减少安全风险:

另外,系统体系结构将尽可能寻求减少安全风险的方法。例如,注销后,就不能通过浏览器的后退功能访问先前访问过的页面。


限制并发登录会话

默认情况下,Identity Manager 用户可进行并发登录会话。不过,可通过打开以修改系统配置对象(更多...)并编辑 security.authn.singleLoginSessionPerApp 配置属性值,将并发会话限制为每个登录应用程序一个会话。该属性是一个包含每个登录应用程序名称(例如,管理员界面、用户界面或 Identity Manager IDE)的一个属性的对象。将该属性的值更改为 true 可为每个用户强制执行单个登录会话。

如果强制执行,则一个用户可以登录到多个会话;但是,只有最后登录的会话保持活动状态且有效。如果用户在无效会话上执行操作,则该用户将被强制退出会话且该会话也将终止。


密码管理

Identity Manager 在多个级别提供密码管理功能:


传递验证

利用传递验证向用户和管理员授予通过一个或多个不同密码进行访问的权限。Identity Manager 通过实现以下方法来管理验证:

关于登录应用程序

登录应用程序定义登录模块组的集合,登录模块组进一步定义用户登录至 Identity Manager 时使用的登录模块的集合和顺序。每个登录应用程序都由一个或多个登录模块组构成。

登录时,登录应用程序会检查其登录模块组集。如果只设置了一个登录模块组,则会使用这个组,并按组中登录模块的定义顺序处理包含的登录模块。如果登录应用程序中含有多个定义的登录模块组,则 Identity Manager 将检查应用于每个登录模块组的登录约束规则以确定要处理的组。

登录约束规则

可以将登录约束规则应用于登录模块组。对于登录应用程序中的每个登录模块组集,如果只有一个组,则不能应用登录约束规则。

Identity Manager 评估第一个登录模块组的约束规则,来确定要处理一个集合中的哪一个登录模块组。如果成功,则会处理该登录模块组。如果失败,则将依次评估每个登录模块组,直到约束规则成功或评估没有约束规则的登录模块组(随即使用该组)。


如果登录应用程序包含多个登录模块组,则应将没有登录约束规则的登录模块组放在集合的最后位置。


登录约束规则示例

下例是基于位置的登录约束规则,此规则从 HTTP 标头获取请求者的 IP 地址,然后检查该地址是否位于 192.168 网络。如果 IP 地址中有 192.168.,则此规则将返回值 True 并选择此登录模块组。

编码样例 12-1 基于位置的登录约束规则

<Rule authType='LoginConstraintRule' name='Sample On Local Network'>

  <match>

    <ref>remoteAddr</ref>

    <s>192.168.</s>

  </match>

  <MemberObjectGroups>

    <ObjectRef type='ObjectGroup' name='All'/>

  </MemberObjectGroups>

</Rule>

编辑登录应用程序

从菜单栏中选择安全,然后选择登录以访问“登录”页。

登录应用程序列表显示:

在“登录”页中,您可以:

要编辑登录应用程序,请从列表中选择相应的应用程序。

设置 Identity Manager 会话限制

在“修改登录应用程序”页中,可以为每个 Identity Manager 登录会话设置超时值(限制)。选择小时数、分钟数和秒数,然后单击保存。您建立的限制将显示在登录应用程序列表中。

可以为每个 Identity Manager 登录应用程序设置会话超时。用户登录到 Identity Manager 应用程序之后,将使用当前配置的会话超时值计算用户会话将来因不活动而超时的日期和时间。然后将计算出来的日期与用户的 Identity Manager 会话一起存储,以便在每次提出请求时可以检查此日期。

如果登录管理员更改了登录应用程序会话超时值,则该值会在将来的所有登录中生效。现有会话的超时时间将取决于用户登录时的有效值。

为 HTTP 超时所设置的值将影响所有 Identity Manager 应用程序,并优先于登录应用程序会话超时值。

禁用对应用程序的访问

在“创建登录应用程序”和“修改登录应用程序”页中,可以选择“禁用”选项以禁用登录应用程序,从而禁止用户进行登录。如果用户尝试登录到已禁用的应用程序,则会将该用户重定向到备用页面,并指出当前禁用了该应用程序。可以通过编辑自定义目录来编辑显示在此页面上的消息。

只有取消选择该选项才能解除对登录应用程序的禁用。由于存在安全保护,您不能禁用管理员登录。

编辑登录模块组

登录模块组列表显示:

在“登录模块组”页中可以创建、编辑和删除登录模块组。从列表中选择一个登录模块组以进行编辑。

编辑登录模块

针对登录模块的以下各个选项输入详细信息或进行选择。(并非所有选项对每个登录模块均可用。)

单击保存可以保存登录模块。保存后,可将该模块放在登录模块组中所有其他模块所在的位置。


警告

如果将 Identity Manager 登录配置为对多个系统进行验证,则 Identity Manager 要验证的所有目标系统的帐户都应使用相同的用户 ID 和密码。

如果用户 ID 和密码组合不同,则对于用户 ID 和密码不同于在 Identity Manager 的“用户表单”表单中输入的用户 ID 和密码的系统,将不能成功登录。

某些此类系统可能使用锁定策略强制限定锁定帐户前失败登录尝试的次数;对于这些系统,虽然用户可通过 Identity Manager 继续成功登录,但用户帐户最终将被锁定。


登录模块处理逻辑

编码样例 12-2 中包含一些伪代码,用于描述 Identity Manager 将验证的用户 ID 映射到 Identity Manager 用户所需的步骤。

编码样例 12-2 描述登录模块处理逻辑的伪代码

if an existing IDM user's ID is the same as the specified user ID

   if that IDM user has a linked resource whose resource name matches the
   resource that was authenticated and whose accountId matches the resource
   accountId returned by successful authentication (e.g. dn), then we have
   found the right IDM user

   otherwise if there is a LoginCorrelationRule associated with the
   configured login module

      evaluate it to see if it maps the login credentials to a single IDM
      user

      otherwise login fails

   otherwise login fails

if the specified userID does not match an existing IDM user's ID

   try to find an IDM user that has a linked resource whose resource name
   matches the resource accountID returned by successful authentication

      if found, then we have found the right IDM user

      otherwise if there is a LoginCorrelationRule associated with the
      configured login module

         evaluate it to see if it maps the login credentials to a single
         IDM user

         otherwise login fails

      otherwise login fails

编码样例 12-2 中,系统将尝试使用用户的链接资源(资源信息)查找匹配的 Identity Manager 用户。如果资源信息方法失败,但配置了 loginCorrelationRule,则系统将尝试使用 loginCorrelationRule 查找匹配的用户。


配置公共资源的验证

如果多个资源在逻辑上是相同的(例如,共享某种信任关系的多个 Active Directory 域服务器),或者多个资源均位于同一物理主机上,则可以将这些资源指定为公共资源

您应该声明公共资源,以使 Identity Manager 知道只应尝试并对一组资源验证一次。否则,如果用户键入错误的密码,Identity Manager 将针对每个资源尝试相同的密码。这可能会由于多次登录失败而导致将用户帐户锁定,即便用户仅键入了一次错误密码。

通过使用公共资源,用户可以对一个公共资源进行验证,并且 Identity Manager 将自动尝试并将用户映射到公共资源组中的其余资源。例如,可能将 Identity Manager 用户帐户链接到资源 AD-1 的资源帐户上。然而,登录模块组可能会定义用户必须通过资源 AD-2 的验证。

如果将 AD-1 和 AD-2 定义为公共资源(在这种情况下,位于同一个信任域中),则当用户成功通过 AD-2 的验证时,Identity Manager 也可以通过在资源 AD-1 上查找相同的用户帐户 ID 将用户映射到 AD-1。


公共资源组中列出的所有资源还必须包含在登录模块定义中。如果登录模块定义中也不包含完整的公共资源列表,则将无法正常实现公共资源功能。


可以使用以下格式在系统配置对象(更多...)中定义公共资源:

编码样例 12-3 配置公共资源的验证

<Attribute name=’common resources’>

    <Attribute name=’Common Resource Group Name’>

        <List>

            <String>Common Resource Name</String>

            <String>Common Resource Name</String>

        </List>

    </Attribute>

</Attribute>


配置 X509 证书验证

使用以下信息和过程配置 Identity Manager 的 X509 证书验证。

必备条件

要在 Identity Manager 中支持基于 X509 证书的验证,请确保正确配置双向(客户机和服务器)SSL 验证。从客户角度而言,这表明支持 X509 标准的用户证书应已导入到浏览器(或可通过智能卡读卡机获得),用于签署用户证书的信任证书应已导入到信任证书的 Web 应用服务器密钥库中。

还必须为客户机验证启用所用的客户机证书。

要验证是否选择了客户机证书的客户机验证选项,请执行以下步骤:

  1. 使用 Internet Explorer,选择工具,然后选择 Internet 选项
  2. 选择内容选项卡。
  3. 在“证书”区域中,单击证书
  4. 选择客户机证书,然后单击高级
  5. 在“证书目的”区域中,确保选择“客户端验证”选项。

在 Identity Manager 中配置 X509 证书验证

要为 Identity Manager 配置 X509 证书验证,请执行以下步骤:

  1. 以“配置器”(或同等权限)身份登录“管理员界面”。
  2. 选择配置,然后选择登录,以显示“登录”页。
  3. 单击管理登录模块组,以显示“登录模块组”页。
  4. 从列表中选择登录模块组。
  5. 在“分配登录模块...”列表中,选择“Identity Manager X509 证书登录模块”。Identity Manager 显示“修改登录模块”页。
  6. 设置成功登录的要求。可接受的值有:
    • 必需 - 要求登录模块必须成功。无论验证成功或失败,都将继续验证列表中的下一个登录模块。如果这是唯一的登录模块,则管理员登录成功。
    • 必备 - 要求登录模块必须成功。如果验证成功,将继续验证列表中的下一个登录模块。如果验证失败,则验证不再继续进行。
    • 足够 - 不要求登录模块必须成功。如果验证成功,将不再继续验证列表中的下一个登录模块,并且管理员登录成功。如果验证失败,则将继续验证列表中的下一个登录模块。
    • 可选 - 不要求登录模块必须成功。无论验证成功或失败,都将继续验证列表中的下一个登录模块。
  7. 选择登录关联规则。这可以是内置规则或自定义的关联规则。(有关创建自定义关联规则的信息,参见下节。)
  8. 单击保存,返回到“修改登录模块组”页。
  9. 或者可以重新排列登录模块顺序(如果为登录模块组分配了多个登录模块),然后,单击保存
  10. 如果尚未为登录应用程序分配登录模块组,请进行分配。在“登录模块组”页中单击“返回到登录应用程序”,然后选择登录应用程序。为应用程序分配登录模块组后,单击保存

  11. 如果 waveset.properties 文件中的 allowLoginWithNoPreexistingUser 选项设置为 true 值,则配置 Identity Manager X509 证书登录模块时会提示您选择新建用户名称规则。在使用相关登录关联规则未找到用户时,可使用此规则确定如何命名新创建的用户。

    新建用户名称规则与登录关联规则的可用输入参数相同。它返回单个字符串,该字符串用于创建新 Identity Manager 用户帐户的用户名

    idm/sample/rules 中包含一个名为 NewUserNameRules.xml 的新建用户名称规则样例。


创建和导入登录关联规则

Identity Manager X509 证书登录模块使用登录关联规则来确定如何将证书数据映射到相应的 Identity Manager 用户。Identity Manager 包含一个名为“通过 X509 证书 SubjectDN 相关联”的内置关联规则。

您也可以添加自己的关联规则。请参阅位于 idm/sample/rules 目录中作为示例的 LoginCorrelationRules.xml。每个关联规则都必须遵循以下准则:

传递到登录关联规则的参数有:

传递给登录关联规则的证书参数的命名约定有:

cert.field name.subfield name

可用于规则的示例参数名包括:

使用传入参数的登录关联规则将返回一个列表,其中包含一个或多个 AttributeCondition。Identity Manager X509 证书登录模块使用它们来查找相关的 Identity Manager 用户。

idm/sample/rules 中包含一个名为 LoginCorrelationRules.xml 的登录关联规则样例。

创建自定义关联规则后,必须将其导入 Identity Manager。在管理员界面中选择配置,然后选择导入交换文件,以使用文件导入工具。

测试 SSL 连接

要测试 SSL 连接,可使用 SSL 转至已配置应用程序界面的 URL(例如,https://idm007:7002/idm/user/login.jsp)。您会被告知正在进入一个安全站点,然后提示您指定要发送 Web 服务器的个人证书。

诊断问题

通过 X509 证书进行验证的问题应以错误消息形式在登录表单中报告。要获得更全面的诊断,可在 Identity Manager 服务器中启用对以下各个类和级别的跟踪:

如果在 HTTP 请求中客户机证书属性没有命名为 javaxservlet.request.X509Certificate,则会收到一条消息,说明无法在 HTTP 请求中找到此属性。

要更正这一点:

  1. 可启用对 SessionFactory 的跟踪,以查看完整的 HTTP 属性列表,并确定 X509 证书的名称。
  2. 使用 Identity Manager 调试设备(更多...)编辑 LoginConfig 对象。
  3. 将 Identity Manager X509 证书登录模块的 <LoginConfigEntry> 中的 <AuthnProperty> 名称改为正确的名称。
  4. 保存后重试。

也可能需要在登录应用程序中先删除,然后再重新添加 Identity Manager X509 证书登录模块。


加密的使用和管理

加密用于确保内存和系统信息库中的服务器数据、以及在服务器和网关之间传送的所有数据的机密性和完整性。

以下各节提供了有关如何在 Identity Manager 服务器和网关中使用和管理加密的更多信息,并阐述了有关服务器和网关加密密钥的问题。

受加密保护的数据

下表显示了在 Identity Manager 产品中受加密保护的数据类型,包括用于保护每种类型数据的加密器。

表 12-1 受加密保护的数据类型 

数据类型

RSA MD5

NIST
Triple DES
168 位密钥
(DESede/ECB/NoPadding)

PKCS#5
基于密码的
加密 56 位密钥 (PBEwithMD5andDES)

服务器加密密钥

 

默认

配置选项1

网关加密密钥

 

默认

配置选项1

字典策略词

 

 

用户密码

 

 

用户密码历史记录

 

 

用户答案

 

 

资源密码

 

 

资源密码历史记录

 

 

服务器和网关之间的所有有效负载

 

 

1通过系统配置对象(更多...)使用 pbeEncrypt 属性或“管理服务器加密”任务进行配置。

服务器加密密钥的问题及答案

请阅读以下各节,以了解有关服务器加密密钥源、位置、维护和使用的常见问题的答案。

服务器加密密钥来自哪里?

服务器加密密钥是对称的 triple-DES 168 位密钥。服务器支持以下两类密钥:

在哪里维护服务器加密密钥?

在系统信息库中维护服务器加密密钥。在任一给定系统信息库中都会有许多数据加密密钥。

服务器如何知道使用哪个密钥对已加密的数据进行解密和重新加密?

存储于系统信息库中的每一加密数据都以服务器加密密钥(用于加密该数据)的 ID 为前缀。将包含加密数据的对象读入内存后,Identity Manager 使用与加密数据的 ID 前缀相关联的服务器加密密钥进行解密,然后使用相同的密钥重新加密(如果数据已更改)。

如何更新服务器加密密钥?

Identity Manager 提供了名为“管理服务器加密”的任务。此任务允许授权的安全管理员执行多项密钥管理任务,包括:

有关如何使用此任务的更多信息,请参见本章中的“管理服务器加密”。

如果更改“当前”服务器密钥,则会对现有加密数据造成什么样的影响?

没有影响。仍将使用现有加密数据 ID 前缀对应的密钥对现有加密数据进行解密或重新加密。如果生成了新的服务器加密密钥并设置为“当前”密钥,则任何要加密的新数据都将使用该新服务器密钥。

为避免出现多密钥问题,以及为了更好地维护数据的完整性,可以使用“管理服务器加密”任务重新加密所有带有“当前”服务器加密密钥的现有加密数据。

如果导入的加密数据没有可用的加密密钥,此时会出现什么情况?

如果导入包含加密数据的对象,但加密该数据所使用的密钥不在要导入该数据的系统信息库中,则仍会导入该数据,但不进行加密。

怎样保护服务器密钥?

如果未将服务器配置为使用基于密码的加密 (PBE) - PKCS#5 加密(通过 pbeEncrypt 属性或“管理服务器加密”任务在系统配置对象中设置),则使用默认密钥对服务器密钥进行加密。对于安装的任何 Identity Manager,设置的默认密钥都是相同的。

如果将服务器配置为使用 PBE 加密,则每次启动服务器时都将生成 PBE 密钥。通过提供一个密码(由特定于服务器的秘密生成)作为 PBEwithMD5andDES 加密器来生成 PBE 密钥。PBE 密钥仅在内存中维护并从不具有持久性。另外,PBE 密钥对于共享一个公共系统信息库的所有服务器都是相同的。

要启用服务器密钥的 PBE 加密,加密器 PBEwithMD5 和 DES 必须可用。默认情况下,Identity Manager 不包括此加密法,但此加密法采用 PKCS#5 标准,许多 JCE 提供者实现(例如由 Sun 和 IBM 提供的实现)中都提供了该标准。

我可以导出服务器密钥以安全地存储在外部吗?

是。如果服务器密钥是 PBE 加密,则在导出之前,将使用默认密钥对这些密钥进行解密和重新加密。这使得它们可以独立于本地服务器 PBE 密钥而稍后被导入同一或其他服务器中。如果使用默认密钥对服务器密钥进行加密,则在导出之前不需要进行任何事先的处理。

将密钥导入服务器后,如果该服务器配置为 PBE 密钥,则将解密这些密钥。然后,如果该服务器配置为 PBE 密钥加密,则使用本地服务器的 PBE 密钥重新加密这些密钥。

将对服务器和网关之间的哪些数据进行加密?

在服务器和网关之间传送的所有数据(有效负载)都由针对每个服务器-网关会话随机生成的对称 168 位密钥进行 triple-DES 加密。

有关网关密钥的问题及答案

请阅读以下各节,以了解有关网关源、存储、分发和保护的常见问题的答案。

加密或解密数据的网关密钥来自哪里?

每次 Identity Manager 服务器连接到网关时,初始握手都将生成一个新的随机 168 位 triple-DES 会话密钥。此密钥将用于加密或解密随后在服务器和网关之间传送的所有数据。对于每个服务器/网关对,生成的会话密钥都是唯一的。

如何将网关密钥分发到网关?

会话密钥由服务器随机生成,然后在服务器和网关之间安全地进行交换,方法是使用作为服务器到网关初始握手的一部分的共享机密主密钥对会话密钥进行加密。

在初始握手期间,服务器会查询网关来确定网关支持的模式。网关可以以两种模式操作:

我可以更新网关密钥(用于加密或解密服务器到网关有效负载)吗?

Identity Manager 提供了名为“管理服务器加密”的任务,它允许授权的安全管理员执行多项密钥管理任务,包括生成新的“当前”网关密钥并使用该“当前”网关密钥更新所有网关。这是用于加密每个会话密钥(用于保护在服务器和网关之间传送的所有有效负载)的密钥。将使用默认密钥或 PBE 密钥对新生成的网关密钥进行加密,具体取决于系统配置(更多...)中 pbeEncrypt 属性的值。

在服务器、网关的什么地方存储网关密钥?

在服务器上,网关密钥就像服务器密钥一样存储在系统信息库中。在网关上,网关密钥存储于本地注册表主键中。

怎样保护网关密钥?

保护网关密钥的方式与保护服务器密钥相同。如果将服务器配置为使用 PBE 加密,则网关密钥将使用 PBE 生成的密钥进行加密。如果该选项为 False,则将使用默认密钥加密。有关更多信息,请参见前面标题为“怎样保护服务器密钥?”的一节。

我可以导出网关密钥以安全地存储在外部吗?

可以通过“管理服务器加密”任务导出网关密钥,就像导出服务器密钥一样。有关更多信息,请参见前面标题为“我可以导出服务器密钥以安全地存储在外部吗?”的一节。

如何销毁服务器和网关密钥?

通过从服务器系统信息库中删除服务器和网关密钥就可以销毁它们。请注意,只要仍在使用该密钥加密服务器数据或仍有网关依赖该密钥,就不应该删除该密钥。通过执行“管理服务器加密”任务,可以使用当前服务器密钥重新加密所有服务器数据,并将当前网关密钥与所有网关同步以确保在删除任何旧密钥之前不再使用旧密钥。


管理服务器加密

Identity Manager 服务器加密功能允许您创建新的 3DES 服务器加密密钥,然后使用 3DES 或 PKCS#5 加密对这些密钥进行加密,如下图中所示。只有具备“安全管理员”权能的用户才可以运行“管理服务器加密”任务(该任务可从服务器任务选项卡访问)。

图 12-1 管理服务器加密任务

管理服务器加密任务

选择运行任务,然后从列表中选择“管理服务器加密”,为此任务配置以下信息:


使用验证类型保护对象

通常,可以使用在 AdminGroup 权能中指定的权限授予访问 Identity Manager objectType(例如,Configuration、Rule 或 TaskDefinition)的权限。但是,授予访问一个或多个受控组织内的所有 Identity Manager objectType 对象的权限有时仍显得过于宽泛。

通过使用授权类型 (AuthType),您可以进一步缩小范围,或者将此访问限制为某个给定 Identity Manager objectType 的部分对象。例如,在填充规则以从用户表单中进行选择时,您可能不希望授权用户访问其控制范围内的所有规则。

要定义新的授权类型,请在 Identity Manager 系统信息库中编辑 AuthorizationTypes 配置对象,然后添加一个新 <AuthType> 元素。此元素需要两个属性:

例如,如果要添加一个新 Rule 授权类型 Marketing Rule 以扩展 Rule,您应该定义以下内容:

<AuthType name='Marketing Rule' extends='Rule'/>

然后,要启用将使用的授权类型,您必须在两个位置中引用该授权类型。

下面是这两种引用的示例。

第一个示例说明了授予访问 Marketing Rules 的权限的 AdminGroup 权能定义。

编码样例 12-4

<AdminGroup name='Marketing Admin'>

<Permissions>

<Permission type='Marketing Rule' rights='View,List,Connect,Disconnect/>

</Permissions>

<AdminGroups>

<ObjectRef type='AdminGroup' id='#ID#Account Administrator'/>

</AdminGroups>

</AdminGroup>

第二个示例说明了允许用户访问对象的 Rule 定义,因为已为这些用户授予了访问 RuleMarketing Rule 的权限。

<Rule name='Competitive Analysis Info' authType='Marketing Rule'>

...

</Rule>


任何用户只要被授予父授权类型或某种授权类型扩展的静态类型的权限,则对于所有子授权类型就将具有相同的权限。因此,使用上面的示例,被授予 Rule 的权限的任何用户对于 Marketing Rule 也将具有相同的权限。但是,反过来并不成立。



安全实践

作为 Identity Manager 管理员,可以通过在安装时和安装后遵照以下建议进一步减少受保护帐户和数据的安全风险。

安装时

您应:

使用时

您应:

如果您的应用服务器是 Servlet 2.2 兼容的服务器,则 Identity Manager 安装进程会将 HTTP 会话超时设置为默认值 30 分钟。通过编辑属性可以更改此值;但是,应将此值设置得更小,以提高安全性。不要将此值设置为高于 30 分钟。

要更改会话超时值,请执行以下步骤:

  1. 编辑 web.xml 文件,该文件位于应用服务器目录树中的 idm/WEB-INF 目录。
  2. 更改下列各行中的数字值:
  3. <session-config>
    <session-timeout>30</session-timeout>
    </session-config>



上一页      目录      索引      下一页     


文件号码:820-5435。 版权所有 2008 Sun Microsystems, Inc. 保留所有权利。