内容


使用 z/OS 和 Windows Kerberos 受信任领域为 WebSphere 应用程序实现 SPNEGO TAI 单点登录

Comments

引言

用户 ID 和密码大量增加的问题以及终端用户必须与之交互的应用程序数量的持续增加,已经成了很多 IT 组织要考虑的重要问题。为此,很多组织都向 Kerberos 技术寻求帮助;Kerberos 的基础理念是,计算机通过第三方 Kerberos 密钥分发中心 (KDC) 信任其他计算机。例如,如果用户通过了 KDC 的身份验证,会随后使用该标识和身份验证状态来请求位于受信任领域中的服务。在这种情况下,用户只需一次性通过 KDC 身份验证,然后其身份验证信息就会在预定义的时间段内有效。用户然后可以访问参与此受信任网络的其他计算机上的服务,而不会再次提示用户 ID 和密码。另一个好处是,用户的明文密码将永远不会通过网络传递。由于需要登录次数更少,因此可以将 Kerberos 身份验证视为减少最终用户所面临的某种“复杂性”的方法。

SPNEGO 协议 (Simple and Protected Negotiation mechanism) 支持在 IBM® WebSphere® Application Server 内实现基于 HTTP 的 Kerberos 身份验证解决方案。这意味着不要求 WebSphere 应用程序支持 Kerberos,而可以使用 SPNEGO Trust Association Interceptor (TAI) 来对用户进行身份验证。

很多中级市场和企业都已经在利用 Microsoft 域控制器来为其分布式环境提供身份验证机制。不过,很多业务关键型 WebSphere 应用程序位于 System z™ 环境中,使用 RACF® 所提供的身份验证和授权机制。本文将说明如何利用 SPNEGO TAI 并在 z/OS KDC 和 Microsoft 域控制器之间建立交叉领域信任,从而允许用户使用其域标识访问 z/OS 上的应用程序。此处所给出的解决方案将说明如何混合使用 Microsoft Windows® 2003 Server、Microsoft Active Directory、z/OS、WebSphere Application Server V6.1 for z/OS 和在存储与转发(Store And Forward,SAF)后端上运行的 z/OS KDC 实现此技术。所使用的客户机将为 Firefox 和 Internet Explorer。

解决方案概述

SPNEGO 协议可为在 WebSphere Application Server 中实现基于 HTTP 的 Kerberos 身份验证解决方案提供支持。这意味着不用要求 WebSphere Application Server 中运行的应用程序识别 Kerberos,而可以转而配置 SPNEGO TAI 来对用户进行身份验证,以访问提供 SPENGO 令牌的 WebSphere Application Server。在此解决方案中,用户必须登录到 Microsoft Active Directory (AD),然后请求 z/OS 上运行的已配置为使用 SPENGO TAI 进行身份验证的 WebSphere 应用程序。为此,必须在 Windows 系统和 z/OS 系统之间建立 Kerberos 交叉领域信任。

在本文中,Kerberos 主体短名称与 RACF ID 相同。这意味着在配置 SPNEGO 属性时,能够将 trimUserName 设置为 True,而不用将 Kerberos 主体名称映射到 RACF ID。如果您的 Kerberos 主体名称和 RACF 用户 ID 注册中心以不同方式标识用户,则必须编写自定义 JAAS LoginModule 来将 Active Directory 中的 Kerberos 主体名称映射到 RACF ID(还可能需要将 RACF ID 映射到 Kerberos 主体名称)。有关如何编写自定义 JAAS LoginModule 的信息,请参见 WebSphere Application Server 信息中心

图 1. 解决方案概览
图 1. 解决方案概览
图 1. 解决方案概览

准备工作

此解决方案要求满足以下先决条件:

  • Windows 域控制器

    • Windows Service Pack 1 或更高版本
    • Windows Server 2003 Resource Kit Tools(请参见参考资料):
      • Kerbtray.exe
      • Klist.exe
    • Windows Server 2003 Service Pack 1 32-bit Support Tools(请参见参考资料):
      • Ksetup.exe

    开始前,请列出此解决方案中将涉及的系统的名称。为了帮助进行此工作,表 1 给出了本文中引用的系统元素,您将需要使用自己的实际值对其加以替换。

    表 1
    本文中的值说明
    Windows 主机名axel.austin.ibm.com
    Windows IP 地址9.2.2.3
    Windows 域/领域名称WSSEC.AUSTIN.IBM.COMKerberos 领域名称是采用大写的 Microsoft 域名。
  • Window 2003 客户机

    Windows 客户机所需的此软件与上面列出的域控制器所需软件相同。开始前,请列出此解决方案中将涉及的系统的名称。和上面一样,请使用表 2 作为参考。

    表 2
    本文中的值说明
    Windows 主机名w2003secdev.austin.ibm.com
    Windows IP 地址9.3.97.87
    Windows 域/领域名称WSSEC.AUSTIN.IBM.COMKerberos 领域名称是采用大写的 Microsoft 域名。
  • System z

    在您的 System z 服务器上,至少需要以下软件(以及相应的修补程序版本):

    • WebSphere Application Server V6.1 for z/OS
    • z/OS V1.6

    开始前,请列出此解决方案中将涉及的系统的名称,同样使用表 3 作为参考。

    表 3
    本文中的值说明
    z/OS 主机名p27.pok.ibm.com
    z/OS IP 地址9.57.30.27
    z/OS 领域名称LSREALM.POK.IBM.COM领域名称的命名约定要求全部采用大写字符。
  • 其他先决条件

    最好提前确定此解决方案其他部分的值。以下这个示例表格帮助您列出这些值:

    表 4
    本文中的值说明
    Cross realm trust secretKERB1SEC此值区分大小写。确保在 Windows 平台上以大写输入此值。

配置 Windows 域控制器

对于此解决方案,所使用的 Windows 服务器必须满足以下要求:

  • 安装了 Windows Kerberos 实用工具。
  • 为 DNS 服务器。
  • 为域控制器。

完成此任务的主要步骤包括:

  1. 安装 Windows Server 2003 Resource Kit Tools
  2. 安装 Microsoft Windows Server 2003 Support Tools
  3. 设置 Windows 域控制器和域名服务器
  4. 配置 KDC 和 kpasswd 服务器
  5. 配置交叉领域信任
  6. 配置正向和反向查找区域
  7. 测试网络设置

将在下面对其中的每个步骤进行详细说明。

  1. 安装 Windows Server 2003 Resource Kit Tools

    下载并安装 Windows Server Resource Kit Tools(请参见参考资料)。与此解决方案相关的工具有:

    • Klist.exe

      Kerberos List 是一个命令行工具,用于查看和删除授予当前登录会话的 Kerberos 票据。要使用 Kerberos List 查看票据,必须在 Microsoft 域成员计算机上运行此工具。从客户机运行 Kerberos List 时,会显示以下内容:

      • 针对 Windows 中的 Kerberos 密钥分发中心 (KDC) 的票据授予票据(Ticket-granting ticket,TGT)
      • 针对 UNIX 上的 Ksserver 的票据授予票据 (TGT)
    • Kerbtray.exe

      Kerberos Tray 是一个图形用户界面工具,用于显示运行 Kerberos V5 身份验证协议的 Microsoft 实现的计算机的相关票据信息。可以通过使用位于桌面通知区域的 Kerberos Tray 工具来查看和清除票据缓存。通过将光标移动到图标上方,可以看到初始票据授予票据 (TGT) 过期的剩余时间。在本地安全机构(Local Security Authority,LSA)更新票据前一个小时内,此图标也会发生变化。

  2. 安装 Microsoft Windows Server 2003 Support Tools

    下载并安装 Microsoft Windows Server 2003 Support Tools(请参见参考资料)。与此解决方案相关的工具是:

    • Ksetup.exe

      Kerberos Setup 是一个命令行工具,可用于配置 Windows 实现 Kerberos V5 互操作性。使用此工具,通过为领域定义 KDC 服务器列表和“kpasswd”服务器,可为 Kerberos V5 领域设置领域条目。还可以为 Kerberos V5 帐户映射建立本地帐户,这对告知操作系统如何对特定的安全主体进行授权非常必要。这可在授权数据和实体之间建立联系。Windows 域并不需要此数据,因为其将通过其他方法获得此数据。

      1. 设置计算机在 Kerberos 领域中的密码。Kerberos 领域(及 Windows 域)将使用以计算机密码的形式提供的保密信息跟踪加入其中的计算机。加入 Kerberos 领域时,必须创建主机主体。领域用于创建主机密钥的密码必须使用此命令输入,以便 Windows 能对获得的主机票据进行解码。
      2. 为该领域设置 KDC 列表。
      3. 为该领域设置 kpasswd 服务器。
      4. 更改 Kerberos V5 领域中用户的密码。
  3. 设置 Windows 域控制器和域名服务器

    我们假定已经设置了 Active Directory。如果尚未设置 AD 和域名服务器(Domain Name Server,DNS),可以使用 Window dcpromo.exe 命令来安装和配置 AD 及 DNS。由于 Active Directory 和 KDC 属于相同的服务器,都为 Windows 环境提供重要的身份验证服务,因此二者也共享相同的身份验证数据存储区。

  4. 配置 KDC 和 kpasswd 服务器

    您需要让 Windows 知道在何处找到 z/OS KDC 和密码服务器。ksetup /AddKdc 命令用于为给定领域定义 KDC 条目。如果省略 KdcName,则可以使用 DNS 来查找 KDC。这一点对服务器如何查找 KDC 非常重要。请参见下面的示例。

    ksetup /AddKdc <RealmName> [KdcName]
    ksetup /AddKdc LSREALM.POK.IBM.COM p27.pok.ibm.com
    ksetup /AddKpasswd <Realmname> <KpasswdName>
    ksetup /AddKpasswd LSREALM.POK.IBM.COM p27.pok.ibm.com
  5. 配置交叉领域信任

    要在 z/OS 和 Windows 之间配置交叉领域信任,请执行以下操作:

    1. 从 z/OS Administrative Tools 菜单打开 Active Directory Domains and Trusts 实用工具。
    2. 接下来,右键单击希望在其上将信任与 z/OS 系统进行关联的 Windows 域,并选择 Properties
      图 2. 将 Windows 域与 z/OS 系统关联
      图 2. 将 Windows 域与 z/OS 系统关联
      图 2. 将 Windows 域与 z/OS 系统关联
    3. 选择 New Trust... 按钮,以打开 New Trust 向导。
      图 3. New Trust 向导
      图 3. New Trust 向导
      图 3. New Trust 向导
    4. 单击 Next,以启动该向导。
    5. 输入希望让此 Windows 域信任的 z/OS 领域的名称。在本例中,此处的领域名称为 LSREALM.POK.IBM.COM。确保使用大写输入领域名称。
      图 4. 输入信任名称
      图 4. 输入信任名称
      图 4. 输入信任名称
    6. 对于 Trust Type,请选择 Realm trust
      图 5. 输入信任类型
      图 5. 输入信任类型
      图 5. 输入信任类型
    7. 对于 Transitivity of Trust,请选择 Nontransitive
      图 6. 选择信任的传递性
      图 6. 选择信任的传递性
      图 6. 选择信任的传递性
    8. 对于 Direction of Trust,请选择 Two-way
      图 7. 选择信任方向
      图 7. 选择信任方向
      图 7. 选择信任方向
    9. 输入密码。确保使用大写输入密码。之所以这样,是因为 RACF RDEFINE 命令会在提交到 RACF 前将所有字符转换为大写。如果密码类不匹配,信任将无效。
    10. 确认输入的信息正确后,请单击 Next
    11. 选择 Finish
    12. 现在将看到两个条目,表明已经配置了双向信任(图 8)。
      图 8. 已经配置了双向信任
      图 8. 已经配置了双向信任
      图 8. 已经配置了双向信任
    13. 必须重新启动系统,以使得更改生效,因此现在请重新启动系统。
  6. 配置正向和反向查找区域

    为了使此解决方案正常工作,Windows 系统必须能够正确地解析 z/OS 领域的主机名。为此,必须在 Windows DNS 中配置一个正向查找区域和一个反向查找区域

    1. 创建正向查找区域

      1. 在 Windows 中选择 Start => Administrative Tools => DNS,从而启动 DNS 管理工具。
      2. 右键单击 Forward Lookup Zone 并选择 New Zone...(图 9)。
        图 9. 创建新正向查找区域
        图 9. 创建新正向查找区域
        图 9. 创建新正向查找区域
      3. 选择 Next,以启动向导。
      4. 选择 Primary Zone。让 Store the zone in Active Directory 保持选中状态,并选择 Next
      5. 选择 To All domain controllers...
      6. 输入 System z 服务器的区域名称(也称为域)。通常,完全限定主机名将类似于 <hostname>.some.domain.name.com。对于本文,System z 服务器的完全限定主机名为 p27.pok.ibm.com,因此区域为 pok.ibm.com。输入了区域名称后,单击 Next
        图 10. 输入区域名称
        图 10. 输入区域名称
        图 10. 输入区域名称
      7. 选择 Do not allow dynamic updates 并单击 Next
      8. 确认所输入的信息正确无误后选择 Finish
        图 11. 确认新区域信息
        图 11. 确认新区域信息
        图 11. 确认新区域信息
      9. 现在将在 Forward Lookup Zone 下看到一个与 System z 的区域(域)对应的文件夹(图 12)。
        图 12. 新建的正向查找区域文件夹
        图 12. 新建的正向查找区域文件夹
        图 12. 新建的正向查找区域文件夹
      10. 接下来需要在此区域中创建一个新主机条目。将为 System z 服务器(即 p27.pok.ibm.com)创建条目。右键单击刚刚创建的区域,并选择 New Host (A)...
        图 13. 创建新主机条目
        图 13. 创建新主机条目
        图 13. 创建新主机条目
      11. 输入主机的主机名和 IP 地址。应该看到一个与 System z 主机的实际完全限定域名(Fully Qualified Domain Name,FQDN)匹配的 FQDN。选择 Add Host
        图 14. 输入主机地址信息
        图 14. 输入主机地址信息
        图 14. 输入主机地址信息
      12. 现在需要创建定义 z/OS 领域及属于该领域的系统的文本条目。首先,右键单击刚刚创建的区域并选择 Other new records...
        图 15. 创建文本条目
        图 15. 创建文本条目
        图 15. 创建文本条目
      13. 选择 Text (TXT) 作为资源记录类型。
        图 16. 选择资源记录类型
        图 16. 选择资源记录类型
        图 16. 选择资源记录类型
      14. 此记录名为 _kerberos,并且此记录的文本 (Text) 必须为完整的 System z 领域名称。在本例中,领域为 LSREALM.POK.IBM.COM。FQDN 将为:_kerberos.your.fully.qualified.domain.com。输入这些值之后,单击 OK
        图 17. 输入文本值
        图 17. 输入文本值
        图 17. 输入文本值
      15. 接下来需要创四个服务位置记录。将为 TCP 和 UDP 创建一个 _kerberos 和 _kpasswd 服务,从而得到四个唯一条目。为此,再次右键单击上面创建的区域,并选择 Other new records...
        图 18. 创建服务位置记录
        图 18. 创建服务位置记录
        图 18. 创建服务位置记录
      16. 选择 Service Location (SRV) 作为资源记录类型。
        图 19. 选择资源记录类型
        图 19. 选择资源记录类型
        图 19. 选择资源记录类型
      17. 将首先创建 _kerberos TCP 服务。在下拉菜单中为 Service 选择 _kerberos,为 Protocol 选择 _tcp。确保 Port number 与在 z/OS 系统上为 KDC 服务定义的端口匹配。输入 z/OS 系统的完全限定主机名。在本例中,此名称为 p27.pok.ibm.com
        图 20. 为 TCP 服务位置记录输入值
        图 20. 为 TCP 服务位置记录输入值
        图 20. 为 TCP 服务位置记录输入值
      18. 接下来将创建 _kerberos UDP 服务。从下拉菜单中选择 _kerberos_udp。同样,确保 Port number 与在 z/OS 系统上为 KDC 服务定义的端口匹配。输入 z/OS 系统的完全限定主机名。和前面一样,此名称为 p27.pok.ibm.com
        图 21. 为 UDP 服务位置记录输入值
        图 21. 为 UDP 服务位置记录输入值
        图 21. 为 UDP 服务位置记录输入值
      19. 为 Service 选择 _kpasswd,为 Protocol 选择 _tcp,从而创建 _kpasswd TCP 服务。将端口更改为 464(或任何与您的 z/OS 密码服务器端口匹配的端口号)。再次输入提供此服务的 z/OS 服务器的完全限定主机名。
        图 22. 为 TCP 服务位置记录输入值
        图 22. 为 TCP 服务位置记录输入值
        图 22. 为 TCP 服务位置记录输入值
      20. 最后,为 Service 选择 _kpasswd,为 Protocol 选择 _udp,从而创建 _kpasswd UDP 服务。将端口改为 464(或任何与您的 z/OS 密码服务器端口匹配的端口号),然后输入提供此服务的 z/OS 服务器的完全限定主机名。
        图 23. 为 UDP 服务位置记录输入值
        图 23. 为 UDP 服务位置记录输入值
        图 23. 为 UDP 服务位置记录输入值
      21. 现在已经对 Windows DNS 定义了所有服务。确保有列出 System z 服务器的领域名称的 _kerberos 文本条目和列出 System z 服务器的主机名和 IP 地址的主机条目。
        图 24. 检查文本条目
        图 24. 检查文本条目
        图 24. 检查文本条目
      22. 接下来,检查 TCP 服务记录,并确保存在与此条目对应的 _kerberos 和 _kpasswd 服务位置记录,而且指向承载此服务的 System z 服务器。确保每个服务的端口(如第三组 [方括号] 中所示)正确。
        图 25. 检查 TCP 服务位置记录
        图 25. 检查 TCP 服务位置记录
        图 25. 检查 TCP 服务位置记录
      23. 接下来,单击 UDP 服务记录,并确保存在与此条目对应的 _kerberos 和 _kpasswd 服务位置记录,而且指向承载此服务的 System z 服务器。同样,要确保每个服务的端口正确。
        图 26. 检查 UDP 服务位置记录
        图 26. 检查 UDP 服务位置记录
        图 26. 检查 UDP 服务位置记录
    2. 创建反向查找区域

      要为 System z 服务器创建反向查找区域,请执行以下步骤:

      1. 在 DNS Administration 窗口中,右键单击 Reverse Lookup Zone 文件夹,并选择 New Zone...
        图 27. 创建反向查找区域
        图 27. 创建反向查找区域
        图 27. 创建反向查找区域
      2. 选择 Next,以启动向导。
      3. 选择 Primary Zone,然后单击 Next
      4. 选择 To all domain controllers,然后单击 Next
      5. 选择 Network ID 并输入 System z 服务器 IP 地址的前三个八进制数。在此示例中,如果 p27.pok.ibm.com 的完整 IP 地址为 9.57.30.27,则前三个八进制数为 9.57.30。单击 Next
        图 28. 指定网络 ID 值
        图 28. 指定网络 ID 值
        图 28. 指定网络 ID 值
      6. 选择 Do not allow dynamic updates,然后单击 Next
      7. 确认信息,然后单击 Finish
        图 29. 确认新区域信息
        图 29. 确认新区域信息
        图 29. 确认新区域信息
      8. 接下来为刚刚创建的反向查找区域创建新指针记录。为此,右键单击新区域,并选择 New Pointer (PTR)...
        图 30. 创建新指针记录
        图 30. 创建新指针记录
        图 30. 创建新指针记录
      9. 通过将完全限定名称输入 Host name 字段并将最后一个八进制数输入 Host IP number(图 31),从而将系统 p27.pok.ibm.com 与 IP 地址 9.57.30.27 关联。或者,如果已经为此 System z 服务器定义了正向区域,则可以使用 Browse 按钮搜索主机 p27.pok.ibm.com。完成后单击 OK
        图 31. 输入指针记录数据
        图 31. 输入指针记录数据
        图 31. 输入指针记录数据
      10. 确认反向查找区域 9.57.30.x 中存在从 9.57.30.27 指向 p27.pok.ibm.com 的指针。
        图 32. 确认反向查找区域数据
        图 32. 确认反向查找区域数据
        图 32. 确认反向查找区域数据

    创建了正向和反向查找区域后,重新启动系统。

  7. 测试网络设置

    必须确保可以在 z/OS 系统和 Windows 系统间进行正向和反向查找。为此,请使用主机名(图 33)和 IP 地址(图 34)进行 ping 操作,并对 z/OS 主机名进行 nslookup 操作(图 35)。

    图 33. 使用主机名进行 ping 操作
    图 33. 使用主机名进行 ping 操作
    图 33. 使用主机名进行 ping 操作
    图 34. 使用 IP 地址进行 ping 操作
    图 34. 使用 IP 地址进行 ping 操作
    图 34. 使用 IP 地址进行 ping 操作
    图 35. 对 z/OS 主机名进行 nslookup 操作
    图 35. 对 z/OS 主机名进行 nslookup 操作
    图 35. 对 z/OS 主机名进行 nslookup 操作

Windows 2003 客户机配置

安装 Windows Server 2003 Resource Kit Tools 和 Windows Server 2003 Service Pack 1 Support Tools(请参见参考资料),然后配置这些设置。

  1. Kerberos 协议注册表设置

    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Domains

      Domains 注册表子项存储关于非 Windows Kerberos 领域的信息。请使用 Kerberos Setup (ksetup.exe) 工具为您的 Kerberos 领域 (LSREALM.POK.IBM.COM) 添加 KDC 主机名 (p27.pok.ibm.com):

      C:\>ksetup /AddKdc LSREALM.POK.IBM.COM p27.pok.ibm.com

      使用 ksetup.exe 工具列出 Kerberos 领域信息:

      default realm = wssec.austin.ibm.com (NT Domain)
      LSREALM.POK.IBM.COM:
             		kdc = p27.pok.ibm.com
             		Realm Flags = 0x0 none
      	
      No user mappings defined.

      使用 regedit.exe 实用工具确保 z/OS Kerberos 领域 LSREALM.POK.IBM.COM 已设置成功(图 36)。

      图 36. 运行 regedit.exe
      图 36. 运行 regedit.exe
      图 36. 运行 regedit.exe
    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\HostToRealm

      此注册表子项存储主机到领域的映射信息。没有工具可用于创建此注册表子项,因此如果没有此注册表子项,必须使用 regedit.exe 进行手动创建:

      1. 创建注册表项 HostToRealm: HKLM\System\CurrentControlSet\Control\Lsa\Kerberos\HostToRealm.
      2. 添加注册表项名称:LSREAM.POK.IBM.COM.
      3. 在注册表项名称 LSREALM.POK.IBM.COM 中创建值:SpnMappings。.
      4. 为 pok.ibm.com 添加 REG_MULTI_SZ
      图 37. 创建 HostToRealm 注册表项
      图 37. 创建 HostToRealm 注册表项
      图 37. 创建 HostToRealm 注册表项
  2. 浏览器 SSO 配置

    必须对使用的浏览器客户机进行配置,以使用 SPNEGO 协议来协商身份验证机制。需要使用 Microsoft Internet Explorer Version 6.0 SP1(或更高版本)Mozilla Firefox 1.5.0.7。Mozilla 的早期版本以及其他支持 SPNEGO 的浏览器可能也能正常工作,不过没有针对此解决方案进行测试。

    • Internet Explorer

      要确保浏览器已经启用了执行 SPNEGO 身份验证的选项,请执行以下步骤:

      1. 在桌面上登录到 Windows AD 域。
      2. 启动 Internet Explorer。
      3. 在浏览器窗口中,选择 Tools => Internet Options => Security
      4. 选择 Local intranet 图标并单击 Sites
      5. 在 Local intranet 窗口中,确保选中了 Include all local (intranet) not listed in other zones 复选框,然后单击 Advanced
      6. 在 Local intranet 窗口中,在 Add this Web site to the zone 字段中填写主机名的 Web 地址,以便能够为 Web sites 字段中显示的网站列表启用单点登录(Single Sign-On,SSO)。(您的站点的 IT 人员可以提供此信息。)单击 OK,以完成此步骤,并关闭 Local intranet 窗口。
      7. 在 Internet Options 选项中,单击 Advanced 选项卡,并滚动到 Security settings。确保选中了 Enable Integrated Windows Authentication (requires restart) 框。
      8. 单击 OK。重新启动 Internet Explorer,以激活此配置。
      图 38. 将网站添加到区域中
      图 38. 将网站添加到区域中
      图 38. 将网站添加到区域中
    • Firefox

      要确保浏览器已经启用了执行 SPNEGO 身份验证的选项,请执行以下步骤:

      1. 在桌面上,登录到 Windows AD 域。
      2. 启动 Firefox。
      3. 在地址字段中键入 about:config
      4. 对于 Filter,键入 network.n
      5. 双击 network.negotiate-auth.trusted-uris(图 39)。此首选项将列出浏览器中允许参加 SPNEGO 身份验证的站点。输入受信任域或 URL 列表,使用逗号进行分隔。
      6. 如果所部署的 SPNEGO 解决方案使用高级 Kerberos 凭据委托功能,请双击 network.negotiate-auth.delegation-uris。此首选项列出浏览器可以将用户身份验证委托给服务器的站点。输入受信任域或 URL 的逗号分隔列表。
      7. 单击 OK。配置将显示更新后的状态。
      8. 重新启动 Firefox 浏览器,以激活此配置。
      图 39. 确认 Firefox SPNEGO 身份验证
      图 39. 确认 Firefox SPNEGO 身份验证
      图 39. 确认 Firefox SPNEGO 身份验证

配置 z/OS

此解决方案使用基于 SAF 的 Kerberos 解决方案,而不是基于 NDBM (New Database Manager) 的 Kerberos 解决方案。这意味着,并非所有 UNIX Kerberos 命令都可用;例如,kadmin 命令就无法工作。因此,管理员必须知道如何将这些命令转换为 RACF 命令。

RACF 定义

由于此解决方案假定 Windows 和 RACF 间的用户 ID 完全相同,因此必须确保采用类似的 ID 进行测试。在此示例中,ID UTLE 将用于验证设置:

  1. 基本 RACF 设置项

    1. 创建将拥有 Kerberos 启动任务的用户:
      ADDUSER SKRBKDC DFLTGRP(SYS1) NOPASSWORD OMVS(UID(0) PROGRAM('/bin/sh') 
      HOME('/etc/skrb/home/kdc'))
    2. 如果尚未处于活动状态,则激活 APPL 类:
      SETROPTS CLASSACT(APPL) RACLIST(APPL)
    3. 在 APPL 类中定义 SKRBKDC 配置文件:
      RDEFINE APPL SKRBKDC UACC(READ)
    4. 使用 RACF 后端时,Kerberos 也需要使用 PTKTDATA 类。如果尚未在系统中激活,则将其激活:
      SETROPTS CLASSACT(PTKTDATA) RACLIST(PTKTDATA)
    5. 接下来,需要创建密钥来屏蔽 KDCN 的 RACF 中的一些值:
      RDEFINE PTKTDATA SKRBKDC UACC(NONE) SSIGNON( KEYMASKED(3734343237343131))
    6. 对 APPL 和 PTKTDATA 类执行 RACLIST 操作:
      SETROPTS RACLIST(APPL PTKTDATA) REFRESH
    7. 在 FACILITY 类中定义 IRR.RUSERMAP 配置文件,并向其授予通用 READ 访问权限:
      RDEFINE FACILITY IRR.RUSERMAP UACC(READ)
      SETROPTS RACLIST(FACILITY) REFRESH
    8. 定义 SKRBKDC 启动任务:
      RDEFINE STARTED SKRBKDC.** STDATA(USER(SKRBKDC))
      RDEFINE STARTED SKRBWTR.** STDATA(USER(SKRBKDC))
    9. 创建 Kerberos 管理 ID KADMIN:
      ADDUSER KADMIN DFLTGRP(SYS1) PASSWORD(pw)
      ALTUSER KADMIN PASSWORD(kadm1sec) NOEXPIRED KERB(KERBNAME(kadmin/admin))
    10. 向此服务的用户授予 Kerberos 段 (Kerberos ID)。(由于 Windows 和 z/OS 之间唯一共同的算法是 DES,因此必须限制用户使用 DESD 和 DES3 算法。)
      ALTUSER UTLE KERB(KERBNAME(UTLE) ENCRYPT(DES NODES3 NODESD)) 
        PASSWORD(KRB1TST) NOEXPIRED
  2. 为 WebSphere Application Server 创建 Kerberos 服务主体名

    1. 为拥有 WebSphere Application Server 控制区域启动任务的 RACF ID 创建 Kerberos 段 (ID)。在此解决方案中,确保所使用的 RACF ID 为 ASCR1。(Kerberos ID KERBNAME 必须为 HTTP/<fully qualified system name>。)

      ALTUSER ASCR1 KERB(KERBNAME(HTTP/p27.pok.ibm.com))
    2. 接下来,为此用户生成 Kerberos 密钥。要生成此密钥,必须将密码与此 ID 关联,此 ID 应该不能登录到系统。由于这个原因,必须在需要新 Kerberos 密钥时运行以下两个命令(WebSphere 或 KDC 管理员必须知道此密码,以便在 Keytab 文件中创建相应条目):

      ALTUSER ASCR1 PASSWORD(was1krb) NOEXPIRED
      ALTUSER ASCR1 NOPASSWORD
    3. 接下来,验证此用户具有对应的有效 Kerberos 段和密钥:

      LISTUSER ASCR1 KERB NORACF
       USER=ASCR1
       KERB INFORMATION
       ----------------
       KERBNAME= HTTP/p27.pok.ibm.com
       KEY VERSION= 001
       KEY ENCRYPTION TYPE= DES NODES3 NODESD
  3. 创建领域定义

    由于 KDC 使用 RACF 作为后端,因此必须在 RACF 内创建领域 (REALM) 定义。可通过创建如下所示的缺省领域来完成此工作(类为 REALM,配置文件为 KERBDFLT;必须存在这两项,以使 Kerberos 使用 RACF 作为其后端):

    RDEFINE REALM KERBDFLT KERB(KERBNAME(LSREALM.POK.IBM.COM) 
      PASSWORD(secret) MINTKTLFE(15) 
    DEFTKTLFE(36000) MAXTKTLFE(86400))

    如果按照需要,请对 REALM 类执行 RACLIST 操作:

    SETROPTS RACLIST(REALM) REFRESH
  4. 创建交叉领域信任

    由于 Windows 和 z/OS 之间唯一共同的算法是 DES,因此应该禁止 z/OS 使用 DESD 和 DES3。可以在定义交叉领域信任时完成此工作。提供了足够的控制来防止这种行为,但如果 Kerberos 环境仅仅与 Windows KDC 交互,则还可以从定义每个用户的 Kerberos ID 时防止此行为而获益。通过上面修改用户时的情况就能看到这一点。(请确保 Windows 和 z/OS 上均以大写输入密码。)

    RDEFINE REALM /.../WSSEC.AUSTIN.IBM.COM/KRBTGT/LSREALM.POK.IBM.COM 
      KERB(PASSWORD(KERB1SEC)
    ENCRYPT(DES NODESD NODES3))
    
    RDEFINE REALM /.../LSREALM.POK.IBM.COM/KRBTGT/WSSEC.AUSTIN.IBM.COM 
      KERB(PASSWORD(KERB1SEC)
    ENCRYPT(DES NODESD NODES3))
  5. 启动 KDC

    现在应该能启动 KDC 了。

    START SKRBKDC

z/OS Kerberos 配置

以下是 KDC 所必需的配置选项:

  1. 创建 /etc/krb5 链接

    此部分可帮助简化所涉及的各个组件的相关工作。Kerberos 配置文件在 z/OS 的缺省位置为 /etc/skrb。对于大多数其他平台,其位置为 /etc/krb5。由于 z/OS SPNEGO TAI 和所有其他平台的代码相同,因此最好创建符号链接,以使 z/OS 表现为 具有 /etc/krb5 目录。可以通过使用以下命令完成此工作:

    ln -s /etc/skrb /etc/krb5
  2. Edit /etc/skrb/krb5.conf

    此文件包含 REALM 定义和 KDC 的各种配置选项:

    ;---------------------------------------------------------------------;
    ;  Kerberos configuration file for testing the SPNEGO TAI             ;
    ;                                                                     ;
    ;  File Name: /etc/krb5/krb5.conf                                     ;
    ;                                                                     ;
    ;---------------------------------------------------------------------;
    
    [libdefaults]
    
    ; The default_realm must match the realm name in RACF. See the
    ; profile KERBDFLT in the REALM class..
    default_realm = LSREALM.POK.IBM.COM
    kdc_default_options = 0x40000000
    default_keytab_name = FILE:/etc/skrb/krb5.keytab
    use_dns_lookup=0
    use_ldap_lookup=0
    
    
    ; Default encryption types if DES3 is not supported
    default_tkt_enctypes = des-cbc-md5 des-cbc-crc
    default_tgs_enctypes = des-cbc-md5 des-cbc-crc
    
    ; We must which systems are in which realm. LSREALM contains the z/OS
    ; system and WSSEC contains the Windows 2003 server.
    [realms]
    LSREALM.POK.IBM.COM = {
        kdc = p27.pok.ibm.com:88
        kpasswd_server = p27.pok.ibm.com:464
    }
    
    WSSEC.AUSTIN.IBM.COM = {
        kdc = axel.wssec.austin.ibm.com:88
        kpasswd_server = axel.wssec.austin.ibm.com:464
    }
    
    ; We explicitly define host names to realms.
    [domain_realm]
  3. 编辑 /etc/skrb/home/kdc/envar

    此文件包含 KDC 所需的各个环境设置:

    #-----------------------------------------------------------------#
    #  Environment variable definitions for the Kerberos Server       #
    #-----------------------------------------------------------------#
    #
    #  General server options
    #
    SKDC_DATABASE=SAF
    SKDC_PORT=88
    SKDC_KPASSWD_PORT=464
    SKDC_KADMIN_PORT=749
    SKDC_NETWORK_THREADS=15
    SKDC_LOCAL_THREADS=15
    SKDC_LOGIN_AUDIT=FAILURE
    SKDC_TKT_ENCTYPES=des-cbc-md5,des-cbc-crc
    #
    #  System configuration options
    #
    LANG=En_US.IBM-1047
    TZ=EST5EDT
    NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/En_US.IBM-1047/%N
    #
    #  Message/debug options
    #
    _EUV_SVC_MSG_LOGGING=STDOUT_LOGGING
    _EUV_SVC_MSG_IDENTITY=SKRBKDC
    _EUV_SVC_MSG_FACILITY=AUTH
    _EUV_SVC_DBG_MSG_LOGGING=1
    _EUV_SVC_DBG=*.8
    _EUV_EXC_ABEND_DUMP=0
    _EUV_SVC_MSG_LEVEL=
    #
    #  These options are used to tell the server where it can find the
    #  configuration and keytab file if they are not in the default directory
    #
    KRB5_CONFIG=/etc/skrb/krb5.conf
    KRB5_KTNAME=/etc/skrb/krb5.keytab
  4. 创建 Kerberos 密钥表 (krb5.keytab) 文件

    SPNEGO TAI 目前要求对 SPN 使用 Keytab 文件。请使用 Java™ Kerberos ktab 命令 <$WAS_HOME>/java/bin/ktab, 创建 Keytab 文件。从命令行使用 ktab -help 命令获得此命令的用法。例如:

    (P27)CTC03:/PYRSA1/usr/lpp/zWebSphere/V6R1/java/J5.0/bin(189):>ktab -help
    Usage: java com.ibm.security.krb5.internal.tools.Ktab [options]
    Available options:
      -l					list the keytab name and entries
      -a <principal_name> [password] 	add an entry to the keytab
      -d <principal_name>     	delete an entry from the keytab
      -k <keytab_name>		specify keytab name and path with FILE: prefix
    1
    #

    从命令行使用 ktab 命令将 SPN 添加到缺省 Keytab 文件中。例如:

    (P27)CTC03:/PYRSA1/usr/lpp/zWebSphere/V6R1/java/J5.0/bin(201):>ktab -a
    HTTP/p27.pok.ibm.com@LSREALM.POK.IBM.COM ot56prod
    
    Done!
    
    Service key for principal HTTP/p27.pok.ibm.com@LSREALM.POK.IBM.COM saved

    从命令行验证缺省 Keytab 文件中提供了正确的 SPN。例如:

    (P27)CTC03:/PYRSA1/usr/lpp/zWebSphere/V6R1/java/J5.0/bin(202):>ktab
    1 entries in keytab, name: /etc/skrb/krb5.keytab
            KVNO    Principal
            ----    ---------
            1       HTTP/p27.pok.ibm.com@LSREALM.POK.IBM.COM

在 System z 上针对 SPNEGO TAI 配置 WebSphere Application Server

下面描述 SPNEGO TAI 所需的 WebSphere Application Server 配置更改。

  1. 启用全局安全性和应用程序安全性

    必需打开用户注册表和 WebSphere Application Server 的本地操作系统全局安全性和应用程序安全性,以实现此功能。从 WebSphere Application Server 管理控制台执行以下操作:

    1. 展开 Security
    2. 选择 Secure administration, applications, and infrastructure
    3. 单击 Enable administrative security
    4. 选中 Enable application security
    5. 对于 Available realm definitions,选择 Local operating system 并单击 Set as current。有关配置本地操作系统的信息,请参见 WebSphere Application Server 信息中心
    图 40. 启用 WebSphere 应用程序安全性
    图 40. 启用 WebSphere 应用程序安全性
    图 40. 启用 WebSphere 应用程序安全性
  2. 启用 Trust Association Interceptor (TAI)

    如果未启用 TAI,则必须将其打开。从管理控制台执行以下操作:

    1. 展开 Security
    2. 选择 Secure administration, applications, and infrastructure
    3. 展开 Web security
    4. 选择 Trust association
    5. 选中 Enable trust association
    图 41. 启用信任关联
    图 41. 启用信任关联
    图 41. 启用信任关联
  3. 启用 SPNEGO TAI

    必须为 WebSphere Application Server 启用 SPNEGO TAI。要为控制区域启用 SPNEGO TAI,请执行以下操作:

    1. 从管理控制台展开 Servers
    2. 选择 Application servers
    3. 选择 Server1
    4. 在 Java and Process Management 下选择 Process definition
    5. 单击 Control,然后选择 Virtual Java Machine。
    6. 在 Generic JVM arguments 框中输入 -Dcom.ibm.ws.security.spnego.isEnabled=true(图 42)。如果希望打开 JGSS 和 KRB5 跟踪,则输入:
      -Dcom.ibm.security.jgss.debug=all -Dcom.ibm.security.krb5.Krb5Debug=all
      图 42. 为 WebSphere Application Server 启用 SPNEGO
      图 42. 为 WebSphere Application Server 控制区域启用 SPNEGO
      图 42. 为 WebSphere Application Server 控制区域启用 SPNEGO

    要为服务器区域启用 SPNEGO TAI,请执行以下操作:

    1. 从管理控制台展开 Servers
    2. 选择 Application servers
    3. 选择 Server1
    4. 在 Java and Process Management 下选择 Process definition
    5. 单击 Servant 并选择 Virtual Java Machine
    6. 在 Generic JVM argument 框中输入 -Dcom.ibm.ws.security.spnego.isEnabled=true。如果希望打开 JGSS 和 KRB5 跟踪,请输入:
      -Dcom.ibm.security.jgss.debug=all -Dcom.ibm.security.krb5.Krb5Debug=all
      图 43. 为 WebSphere Application Server 服务器区域启用 SPNEGO
      图 43. 为 WebSphere Application Server 服务器区域启用 SPNEGO
      图 43. 为 WebSphere Application Server 服务器区域启用 SPNEGO
  4. 配置 SPNEGO 属性

    最后,可以添加 SPN1 的 SpnegoTAIProperties,以使用缺省 filterClass,并拦截主机 p27.pok.ibm.com 的 *snoop* 请求。

    图 44. SPNEGO 属性
    图 44. SPNEGO 属性
    图 44. SPNEGO 属性

    停止并重新启动 WebSphere Application Server,以使 SPNEGO TAI 配置生效。

测试 SPNEGO TAI 设置

在 Windows 客户计算机上,使用域帐户登录到域控制器,打开浏览器客户机(Internet Explorer 或 Firefox)并键入 URL:http://p27.pok.ibm.com:9080/snoop。如果未提示用户名和密码即显示 snoop 内容,则表明已经成功地使用 Kerberos 和 SPNEGO 配合 z/OS 与 Microsoft Kerberos 的交叉领域设置了单点登录。

调试技巧

以下是与此解决方案相关的一些基本问题确定技巧。

启用 z/OS Kerberos 跟踪

要为 KDC 打开和关闭调试功能,必须能够修改 Kerberos 启动任务。用于此工作的命令的通用语法如下:

F SKRBKDC,parmaters

要打开调试功能,请使用以下命令:

F SKRBKDC,DEBUG ON

要关闭调试功能,请使用以下命令:

F SKRBKDC,DEBUG OFF

可以通过环境变量或使用 modify 命令动态地设置 KDC 的调试级别。用于动态设置调试级别的语法如下:

F SKRBKDC,DEBUG subcomponent.level[,subcomponent.level, ...]

表 4 列出了可以在 DEBUG modify 命令中指定的所有子组件。其级别使用数字值 0 到 9 表示,0 关闭组件的调试,而 9 会生成最多的信息,其中包括内存转储。可以使用 * 选择所有子组件。

表 5
调试组件描述
KRB_APIKerberos API 入口/出口
KRB_GENERAL常规 Kerberos 消息
KRB_CCACHE凭据缓存消息
KRB_RCACHE重放缓存消息
KRB_CRYPTO加密消息
KRB_GSSAPIGSS-API 消息
KRB_KEYTAB密钥表消息
KRB_LIBKerberos 库消息
KRB_ASN1ASN.1 消息
KRB_OS操作系统接口消息
KRB_KDCKDC 消息
KRB_KDBKerberos 数据库消息
KRB_KUTKerberos 实用工具消息
KRB_RPCRPC 消息
KRB_ADMINKerberos 管理消息

以下是如何为所有子组件打开第 9 级调试的示例:

F SKRBKDC,DEBUG *.9

以下是如何为两个子组件 KRB_KDC 和 KRB_KEYTAB 打开第 1 级调试的示例:

F SKRBKDC,DEBUG KRB_KDC.1,KRB_KEYTAB.1

启用 IBM JGSS/KRB5 和 WebSphere Application Server 安全性跟踪

IBM Java Generic Security Service (JGSS) 和 IBM SPNEGO 提供程序使用 Java 虚拟机 (JVM) 自定义属性来控制跟踪信息。SPNEGO TAI 使用 JRas 工具来允许管理员仅跟踪特定的类。请使用以下重要的跟踪规范或 JVM 自定义属性来通过跟踪调试 TAI:

表 6
跟踪使用
com.ibm.security.jgss.debug通过将此 JVM 自定义属性设置为 all,可通过 JGSS 代码进行跟踪。消息将输出到 trace.log 文件和 SystemOut.log 中。
com.ibm.security.krb5.Krb5Debug通过将此 JVM 自定义属性设置为 all,可通过 Kerberos5 特定的 JGSS 代码进行跟踪。消息将输出到 trace.log 文件和 SystemOut.log 中。
com.ibm.ws.security.security.*可通过管理控制台设置此跟踪,方法为选择 Troubleshooting => Logging and Tracing => server1 => Change Log Detail Levels => com.ibm.ws.security.security.*。消息将输出到 trace.log 文件中。

启用 Windows Kerberos 跟踪

要在特定的计算机上启用 Kerberos 事件日志记录,请执行以下步骤:

  1. 在所选的计算机上启动注册表编辑器。(警告:注册表中不正确的编辑操作可能会严重损坏您的系统。更改注册表前,应该对计算机上任何有价值的数据进行备份。)
  2. 添加以下注册表值: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters
    • 注册表值 (Registry Value): LogLevel
    • 值类型 (Value Type): REG_DWORD
    • 数值数据 (Value Data): 0x1
  3. 如果不存在 Parameters 注册表子项,则进行创建。(不再需要时,请删除此注册表值,以免降低计算机性能。另外,还可以通过删除此注册表值来禁用特定计算机上的 Kerberos 事件日志记录。)
  4. 退出注册表编辑器,然后重新启动计算机。

结束语

本文说明了在交叉领域信任模型中如何配置 z/OS RACF KDC 和 Microsoft Active Directory KDC。在此解决方案中,用户通过 Microsoft 域控制器进行身份验证,然后就可以使用 RACF 标识访问 WebSphere Application Server 上的 z/OS 服务;z/OS 上的 WebSphere Application Server 可以在继续使用 RACF 所提供的强安全服务时,同时为用户提供单点登录体验。

这个特别的解决方案的一个重要结论在于,AD 和 RACF 之间的用户标识必须等效;例如,在 Active Directory 服务器上有 ID“ROGERS”,与此对应,RACF 中有“ROGERS”。在实际中,几乎没有组织提供这种特殊的整个组织的命名约定,强制要求其 AD 用户与 RACF 用户具有相同的 ID。此解决方案并不能处理平台间用户 ID 不同的情况。WebSphere Application Server 信息中心提供了一个示例 JAAS 登录模块,可执行这种类型的映射。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=249497
ArticleTitle=使用 z/OS 和 Windows Kerberos 受信任领域为 WebSphere 应用程序实现 SPNEGO TAI 单点登录
publish-date=08212007