扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
引言
用户 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. 解决方案概览
|
准备工作
此解决方案要求满足以下先决条件:
Windows 域控制器
开始前,请列出此解决方案中将涉及的系统的名称。为了帮助进行此工作,表 1 给出了本文中引用的系统元素,您将需要使用自己的实际值对其加以替换。
表 1 | ||
项 | 本文中的值 | 说明 |
---|---|---|
Windows 主机名 | axel.austin.ibm.com | |
Windows IP 地址 | 9.2.2.3 | |
Windows 域/领域名称 | WSSEC.AUSTIN.IBM.COM | Kerberos 领域名称是采用大写的 Microsoft 域名。 |
Window 2003 客户机
Windows 客户机所需的此软件与上面列出的域控制器所需软件相同。开始前,请列出此解决方案中将涉及的系统的名称。和上面一样,请使用表 2 作为参考。
表 2 | ||
项 | 本文中的值 | 说明 |
---|---|---|
Windows 主机名 | w2003secdev.austin.ibm.com | |
Windows IP 地址 | 9.3.97.87 | |
Windows 域/领域名称 | WSSEC.AUSTIN.IBM.COM | Kerberos 领域名称是采用大写的 Microsoft 域名。 |
System z
在您的 System z 服务器上,至少需要以下软件(以及相应的修补程序版本):
开始前,请列出此解决方案中将涉及的系统的名称,同样使用表 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 secret | KERB1SEC | 此值区分大小写。确保在 Windows 平台上以大写输入此值。 |
|
配置 Windows 域控制器
对于此解决方案,所使用的 Windows 服务器必须满足以下要求:
|
完成此任务的主要步骤包括:
将在下面对其中的每个步骤进行详细说明。
安装 Windows Server 2003 Resource Kit Tools
下载并安装 Windows Server Resource Kit Tools(请参见参考资料)。与此解决方案相关的工具有:
Klist.exe
Kerberos List 是一个命令行工具,用于查看和删除授予当前登录会话的 Kerberos 票据。要使用 Kerberos List 查看票据,必须在 Microsoft 域成员计算机上运行此工具。从客户机运行 Kerberos List 时,会显示以下内容:
Kerbtray.exe
Kerberos Tray 是一个图形用户界面工具,用于显示运行 Kerberos V5 身份验证协议的 Microsoft 实现的计算机的相关票据信息。可以通过使用位于桌面通知区域的 Kerberos Tray 工具来查看和清除票据缓存。通过将光标移动到图标上方,可以看到初始票据授予票据 (TGT) 过期的剩余时间。在本地安全机构(Local Security Authority,LSA)更新票据前一个小时内,此图标也会发生变化。
安装 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 域并不需要此数据,因为其将通过其他方法获得此数据。
设置 Windows 域控制器和域名服务器
我们假定已经设置了 Active Directory。如果尚未设置 AD 和域名服务器(Domain Name Server,DNS),可以使用 Window dcpromo.exe
命令来安装和配置 AD 及 DNS。由于 Active Directory 和 KDC 属于相同的服务器,都为 Windows 环境提供重要的身份验证服务,因此二者也共享相同的身份验证数据存储区。
配置 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 |
配置交叉领域信任
要在 z/OS 和 Windows 之间配置交叉领域信任,请执行以下操作:
LSREALM.POK.IBM.COM
。确保使用大写输入领域名称。 RDEFINE
命令会在提交到 RACF 前将所有字符转换为大写。如果密码类不匹配,信任将无效。
配置正向和反向查找区域
为了使此解决方案正常工作,Windows 系统必须能够正确地解析 z/OS 领域的主机名。为此,必须在 Windows DNS 中配置一个正向查找区域和一个反向查找区域。
创建正向查找区域
pok.ibm.com
。输入了区域名称后,单击 Next。 _kerberos
,并且此记录的文本 (Text) 必须为完整的 System z 领域名称。在本例中,领域为 LSREALM.POK.IBM.COM
。FQDN 将为:_kerberos.your.fully.qualified.domain.com。输入这些值之后,单击 OK。 p27.pok.ibm.com
。 p27.pok.ibm.com
。 464
(或任何与您的 z/OS 密码服务器端口匹配的端口号)。再次输入提供此服务的 z/OS 服务器的完全限定主机名。 464
(或任何与您的 z/OS 密码服务器端口匹配的端口号),然后输入提供此服务的 z/OS 服务器的完全限定主机名。 创建反向查找区域
要为 System z 服务器创建反向查找区域,请执行以下步骤:
9.57.30
。单击 Next。 创建了正向和反向查找区域后,重新启动系统。
测试网络设置
必须确保可以在 z/OS 系统和 Windows 系统间进行正向和反向查找。为此,请使用主机名(图 33)和 IP 地址(图 34)进行 ping 操作,并对 z/OS 主机名进行 nslookup 操作(图 35)。
|
Windows 2003 客户机配置
安装 Windows Server 2003 Resource Kit Tools 和 Windows Server 2003 Service Pack 1 Support Tools(请参见参考资料),然后配置这些设置。
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)。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\HostToRealm
此注册表子项存储主机到领域的映射信息。没有工具可用于创建此注册表子项,因此如果没有此注册表子项,必须使用 regedit.exe 进行手动创建:
HKLM\System\CurrentControlSet\Control\Lsa\Kerberos\HostToRealm
.
LSREAM.POK.IBM.COM
.
SpnMappings
。.
浏览器 SSO 配置
必须对使用的浏览器客户机进行配置,以使用 SPNEGO 协议来协商身份验证机制。需要使用 Microsoft Internet Explorer Version 6.0 SP1(或更高版本)或 Mozilla Firefox 1.5.0.7。Mozilla 的早期版本以及其他支持 SPNEGO 的浏览器可能也能正常工作,不过没有针对此解决方案进行测试。
Internet Explorer
要确保浏览器已经启用了执行 SPNEGO 身份验证的选项,请执行以下步骤:
Firefox
要确保浏览器已经启用了执行 SPNEGO 身份验证的选项,请执行以下步骤:
about:config
。
network.n
。
|
配置 z/OS
此解决方案使用基于 SAF 的 Kerberos 解决方案,而不是基于 NDBM (New Database Manager) 的 Kerberos 解决方案。这意味着,并非所有 UNIX Kerberos 命令都可用;例如,kadmin
命令就无法工作。因此,管理员必须知道如何将这些命令转换为 RACF 命令。
RACF 定义
由于此解决方案假定 Windows 和 RACF 间的用户 ID 完全相同,因此必须确保采用类似的 ID 进行测试。在此示例中,ID UTLE 将用于验证设置:
基本 RACF 设置项
ADDUSER SKRBKDC DFLTGRP(SYS1) NOPASSWORD OMVS(UID(0) PROGRAM('/bin/sh') HOME('/etc/skrb/home/kdc')) |
SETROPTS CLASSACT(APPL) RACLIST(APPL) |
RDEFINE APPL SKRBKDC UACC(READ) |
SETROPTS CLASSACT(PTKTDATA) RACLIST(PTKTDATA) |
RDEFINE PTKTDATA SKRBKDC UACC(NONE) SSIGNON( KEYMASKED(3734343237343131)) |
SETROPTS RACLIST(APPL PTKTDATA) REFRESH |
RDEFINE FACILITY IRR.RUSERMAP UACC(READ) SETROPTS RACLIST(FACILITY) REFRESH |
RDEFINE STARTED SKRBKDC.** STDATA(USER(SKRBKDC)) RDEFINE STARTED SKRBWTR.** STDATA(USER(SKRBKDC)) |
ADDUSER KADMIN DFLTGRP(SYS1) PASSWORD(pw) ALTUSER KADMIN PASSWORD(kadm1sec) NOEXPIRED KERB(KERBNAME(kadmin/admin)) |
ALTUSER UTLE KERB(KERBNAME(UTLE) ENCRYPT(DES NODES3 NODESD)) PASSWORD(KRB1TST) NOEXPIRED |
为 WebSphere Application Server 创建 Kerberos 服务主体名
为拥有 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)) |
接下来,为此用户生成 Kerberos 密钥。要生成此密钥,必须将密码与此 ID 关联,此 ID 应该不能登录到系统。由于这个原因,必须在需要新 Kerberos 密钥时运行以下两个命令(WebSphere 或 KDC 管理员必须知道此密码,以便在 Keytab 文件中创建相应条目):
ALTUSER ASCR1 PASSWORD(was1krb) NOEXPIRED ALTUSER ASCR1 NOPASSWORD |
接下来,验证此用户具有对应的有效 Kerberos 段和密钥:
LISTUSER ASCR1 KERB NORACF USER=ASCR1 KERB INFORMATION ---------------- KERBNAME= HTTP/p27.pok.ibm.com KEY VERSION= 001 KEY ENCRYPTION TYPE= DES NODES3 NODESD |
创建领域定义
由于 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 |
创建交叉领域信任
由于 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)) |
启动 KDC
现在应该能启动 KDC 了。
START SKRBKDC |
z/OS Kerberos 配置
以下是 KDC 所必需的配置选项:
创建 /etc/krb5 链接
此部分可帮助简化所涉及的各个组件的相关工作。Kerberos 配置文件在 z/OS 的缺省位置为 /etc/skrb。对于大多数其他平台,其位置为 /etc/krb5。由于 z/OS SPNEGO TAI 和所有其他平台的代码相同,因此最好创建符号链接,以使 z/OS 表现为 具有 /etc/krb5 目录。可以通过使用以下命令完成此工作:
ln -s /etc/skrb /etc/krb5 |
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] |
编辑 /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 |
创建 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 配置更改。
启用全局安全性和应用程序安全性
必需打开用户注册表和 WebSphere Application Server 的本地操作系统全局安全性和应用程序安全性,以实现此功能。从 WebSphere Application Server 管理控制台执行以下操作:
启用 Trust Association Interceptor (TAI)
如果未启用 TAI,则必须将其打开。从管理控制台执行以下操作:
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者