创建 Kerberos 服务主体名称和密钥表文件
必须执行本任务才能处理对 WebSphere® Application Server 的 SPNEGO Web 或 Kerberos 认证请求。您可以使用 Microsoft Windows、IBM i、Linux、Solaris、麻省理工学院 (MIT) 和 z/OS® 操作系统密钥分发中心 (KDC) 来创建 Kerberos 服务主体名称和密钥表文件。
关于此任务
使用 Microsoft Windows KDC 来创建 Kerberos 服务主体名称和密钥表文件:
在 Active Directory 域控制器机器上执行此任务。请完成下列步骤,以确保对相关联的密钥分发中心 (KDC) 正确配置运行 Active Directory 域控制器的 Windows 2003 Server。
- 在 Microsoft Active Directory 中为 WebSphere Application Server 创建用户帐户。
单击开始 -> 程序 -> 管理工具 -> Active Directory 用户和计算机。
请使用 WebSphere Application Server 的名称。例如,如果正在 WebSphere Application Server 机器上运行的应用程序服务器名称为 myappserver.austin.ibm.com,请在 Active Directory 中创建名为 myappserver 的新用户。
确保在计算机和域控制器下没有计算机名称 myappserver。如果已存在名称为 myappserver 的计算机,那么必须创建不同的用户帐户名称。- 单击开始 -> 程序 -> 管理工具 -> Active Directory 用户和计算机 -> 计算机。
- 单击程序 -> 管理工具 -> Active Directory 用户和计算机 -> 域控制器。
- 使用 setspn 命令将 Kerberos 服务主体名称 <service name>/<fully qualified host name> 映射到 Microsoft 用户帐户。
用于 SPNEGO Web 认证的服务名称必须是 HTTP。但是,Kerberos 认证的服务名称可以是 KDC 所允许的任何字符串。
下面是用于 SPNEGO Web 认证的 setspn 命令用法示例:
C:\Program Files\Support Tools> setspn -A HTTP/myappserver.austin.ibm.com myappserver
注: 主机名必须是标准主机名。要点: 确保未将相同的服务主体名称 (SPN) 映射至多个 Microsoft 用户帐户。如果将同一个 SPN 映射至多个用户帐户,那么 Web 浏览器客户机可能会将 NT LAN 管理器 (NTLM) 令牌而不是 SPNEGO 令牌发送到 WebSphere Application Server。 - 创建 Kerberos 密钥表文件并使其可供 WebSphere Application Server
使用。使用 Windows Server 工具箱中的 ktpass 工具为 SPN 创建 Kerberos 密钥表文件 (krb5.keytab)。
注: Kerberos 密钥表文件包含一组类似于用户密码的密钥。主机通过将其 Kerberos 密钥表文件存储在本地磁盘上来保护这些文件,这一点至关重要。
使用 Windows Server 工具箱中的 ktpass 工具为服务主体名称 (SPN) 创建 Kerberos 密钥表文件。请使用与您正在使用的 Windows Server 级别匹配的最新版本 ktpass 工具。例如,对于 Windows 2003 Server,请使用此工具的 Windows 2003 版本。
要确定 ktpass 工具的合适参数值,请从命令行运行 ktpass -? 命令。此命令将列示与特定操作系统相对应的 ktpass 工具是使用 -crypto RC4-HMAC 还是 -crypto RC4-HMAC-NT 参数值。要屏蔽工具箱的警告消息,必须指定 -ptype KRB5_NT_PRINCIPAL 参数值。
Windows 2003 Server 版本的 ktpass 工具支持 RC4-HMAC 加密类型和单一数据加密标准 (DES)。有关 ktpass 工具的更多信息,请参阅 Windows 2003 Technical Reference - Ktpass overview。
下列代码显示了在命令行上输入 ktpass -? 命令时的可用功能。根据您使用的工具箱版本不同,此信息也可能有所不同。C:\Program Files\Support Tools>ktpass -? Command line options: ---------------------most useful args [- /] out : Keytab to produce [- /] princ : Principal name (user@REALM) [- /] pass : password to use use "*" to prompt for password. [- +] rndPass : ... or use +rndPass to generate a random password [- /] minPass : minimum length for random password (def:15) [- /] maxPass : maximum length for random password (def:256) ---------------------less useful stuff [- /] mapuser : map princ to this user account (default: don't) [- /] mapOp : how to set the mapping attribute (default: add it) [- /] mapOp : is one of: [- /] mapOp : add : add value (default) [- /] mapOp : set : set value [- +] DesOnly : Set account for des-only encryption (default:don't) [- /] in : Keytab to read/digest ---------------------options for key generation [- /] crypto : Cryptosystem to use [- /] crypto : is one of: [- /] crypto : DES-CBC-CRC : for compatibility [- /] crypto : DES-CBC-MD5 : for compatibliity [- /] crypto : RC4-HMAC-NT : default 128-bit encryption [- /] ptype : principal type in question [- /] ptype : is one of: [- /] ptype : KRB5_NT_PRINCIPAL : The general ptype-- recommended [- /] ptype : KRB5_NT_SRV_INST : user service instance [- /] ptype : KRB5_NT_SRV_HST : host service instance [- /] kvno : Override Key Version Number Default: query DC for kvno. Use /kvno 1 for Win2K compat. [- +] Answer : +Answer answers YES to prompts. -Answer answers NO. [- /] Target : Which DC to use. Default:detect ---------------------options for trust attributes (Windows Server 2003 Sp1 Only [- /] MitRealmName : MIT Realm which we want to enable RC4 trust on. [- /] TrustEncryp : Trust Encryption to use; DES is default [- /] TrustEncryp : is one of: [- /] TrustEncryp : RC4 : RC4 Realm Trusts (default) [- /] TrustEncryp : DES : go back to DES
要点: 不要在 ktpass 命令中使用 -pass 开关来重置 Microsoft Windows 服务器帐户的密码。有关更多信息,请参阅 Windows 2003 Technical Reference - Ktpass overview。根据加密类型的不同,可以通过下列其中一种方法使用 ktpass 工具来创建 Kerberos 密钥表文件。下一节描述了 ktpass 工具所使用的不同加密类型。运行 ktpass -? 命令来确定 Microsoft Windows 环境中的特定工具箱期望得到哪个 -crypto 参数值十分重要。- 单一 DES 加密类型:从命令提示符运行 ktpass 命令:
ktpass -out c:\temp\myappserver.keytab -princ HTTP/myappserver.austin.ibm.com@WSSEC.AUSTIN.IBM.COM -mapUser myappserv -mapOp set -pass was1edu -crypto DES-CBC-MD5 -pType KRB5_NT_PRINCIPAL +DesOnly
表 1. 将 ktpass 用于单一 DES 加密类型. 下表描述如何将 ktpass 用于单一 DES 加密类型。
选项 说明 -out c:\temp\myappserver.keytab 密钥将写入此输出文件。 -princ HTTP/myappserver.austin.ibm.com@WSSEC.AUSTIN.IBM.COM 用户登录名的并置,并且领域必须大写。 -mapUser 密钥将映射至用户 myappserver。 -mapOp 此选项设置映射。 -pass was1edu 此选项是用户标识的密码。 -crypto DES-CBC-MD5 此选项使用单一 DES 加密类型。 -pType KRB5_NT_PRINCIPAL 此选项指定 KRB5_NT_PRINCIPAL 主体值。指定此选项以屏蔽工具箱警告消息。 +DesOnly 此选项只生成 DES 加密内容。 - RC4-HMAC 加密类型:要点: 仅当将 Windows 2003 Server 用作 KDC 时,RC4-HMAC 加密才受支持。在命令提示符下运行 ktpass 命令。
ktpass -out c:\temp\myappserver.keytab -princ HTTP/myappserver.austin.ibm.com@WSSEC.AUSTIN.IBM.COM -mapUser myappserver -mapOp set –pass was1edu -crypto RC4-HMAC -pType KRB5_NT_PRINCIPAL
表 2. 将 ktpass 用于 RC4-HMAC 加密类型 选项 说明 -out c:\temp\myappserver.keytab 密钥将写入此输出文件。 -princ HTTP/myappserver.austin.ibm.com@WSSEC.AUSTIN.IBM.COM 用户登录名的并置,并且领域必须大写。 -mapUser 密钥将映射至用户 myappserver。 -mapOp 此选项设置映射。 -pass was1edu 此选项是用户标识的密码。 -crypto RC4-HMAC 此选项选择 RC4-HMAC 加密类型。 -pType KRB5_NT_PRINCIPAL 此选项指定 KRB5_NT_PRINCIPAL 主体值。指定此选项以屏蔽工具箱警告消息。 - 对于 RC4-HMAC-NT 加密类型在命令提示符下运行 ktpass 命令。
ktpass -out c:\temp\myappserver.keytab -princ HTTP/myappserver.austin.ibm.com@WSSEC.AUSTIN.IBM.COM -mapUser myappserver -mapOp set -pass was1edu -crypto RC4-HMAC-NT -pType KRB5_NT_PRINCIPAL
将创建用于 SPNEGO 的 Kerberos 密钥表文件。表 3. 将 ktpass 用于 RC4-HMAC-NT 加密类型 选项 说明 -out c:\temp\myappserver.keytab 密钥将写入此输出文件。 -princ HTTP/myappserver.austin.ibm.com@WSSEC.AUSTIN.IBM.COM 用户登录名的并置,并且领域必须大写。 -mapUser 密钥将映射至用户 myappserver。 -mapOp 此选项设置映射。 -pass was1edu 此选项是用户标识的密码。 -crypto RC4-HMAC-NT 此选项选择 RC4-HMAC-NT 加密类型。 -pType KRB5_NT_PRINCIPAL 此选项指定 KRB5_NT_PRINCIPAL 主体值。指定此选项以屏蔽工具箱警告消息。
- 单一 DES 加密类型:
使用 iSeries KDC、Linux KDC、Solaris KDC 和 MIT KDC 来创建 Kerberos 服务主体名称和密钥表文件:
有关更多详细信息,请参阅 kadmin、kadmin.local addprinc 和 ktadd 命令的 Kerberos 实现文档。
本任务在 Linux、Solaris 或 MIT KDC 机器上执行。
- 创建用于 Kerberos 认证的 Kerberos 服务主体,例如:
WAS/testmach.austin.ibm.com kadmin.local: addprinc WAS/testmach.austin.ibm.com
- 将新创建的 Kerberos 服务主体 WAS/testmach.austin.ibm.com 添加到缺省
krb5.keytab 文件中,例如:
kadmin.local: ktadd WAS/testmach.austin.ibm.com
使用 z/OS KDC 来创建 Kerberos 服务主体名称和密钥表文件:
在可以使用“简单且受保护的 GSS-API 协商”(SPNEGO) Web 认证和 Kerberos 认证前,WebSphere Application Server 管理员必须先在运行 WebSphereApplication Server 的主机上创建 Kerberos 密钥表文件。
要创建 SPN,请执行以下操作:
- Kerberos 标识 (KERBNAME) 的格式必须为 <service>/<fully qualified system name>。
- 以下示例会为 SPNEGO Web HTTP/host1.pok.ibm.com 创建 Kerberos SPN:
ALTUSER ASCR1 KERB(KERBNAME(HTTP/host1.pok.ibm.com))
避免故障: 您应该确保 ALTUSER 命令中指定的受支持加密类型列表与 Kerberos 配置文件 krb5.conf 中指定的受支持加密类型列表一致。例如,如果 krb5.conf 配置文件指定只支持 aes256-cts-hmac-sha1-96,那么 ENCRYPT 操作数应该指定不支持除 AES256 以外的所有加密类型。gotcha
- 为此用户生成 Kerberos 密钥。要生成此密钥,密码必须与此标识相关联。请不要使用此标识来登录系统。每当需要新的
Kerberos 密钥时,请输入下面这两行。注: WebSphere 或 KDC 管理员必须知道此密码才能在密钥表文件中创建条目。
ALTUSER ASCR1 PASSWORD(was1krb) NOEXPIRED ALTUSER ASCR1 NOPASSWORD
- 验证此用户是否具有有效的 Kerberos 段和密钥,例如:
LISTUSER ASCR1 KERB NORACF USER=ASCR1 KERB INFORMATION ---------------- KERBNAME= HTTP/host1.pok.ibm.com KEY VERSION= 001 KEY ENCRYPTION TYPE= DES NODES3 NODESD
要创建 Kerberos 密钥表 (krb5.keytab) 文件,请通过执行以下操作来使用 Java™ Kerberos ktab 命令 <$WAS_HOME>/java/bin/ktab:
- 在命令行中,输入 ktab –help 命令以获取此命令的正确用法。例如:
(host1)CTC03:/PYRSA1/usr/lpp/zWebSphere/V7R1/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 -m <source_keytab_name> <destination_keytab_name> specify merging source keytab file name and destination keytab file name
- 在命令行中,使用 ktab 命令将 SPN 添加到缺省密钥表文件,例如:
(host1)CTC03:/PYRSA1/usr/lpp/zWebSphere/V7R1/java/J5.0/bin(201):>ktab -a HTTP/host1.pok.ibm.com@LSREALM.POK.IBM.COM ot56prod Done! Service key for principal HTTP/host1.pok.ibm.com@LSREALM.POK.IBM.COM saved
- 验证缺省密钥表文件是否包含正确的 SPN,例如:
(host1)CTC03:/PYRSA1/usr/lpp/zWebSphere/V7R1/java/J5.0/bin(202):>ktab 1 entries in keytab, name: /etc/skrb/krb5.keytab KVNO Principal ---- --------- 1 HTTP/host1.pok.ibm.com@LSREALM.POK.IBM.COM
ftp> bin
ftp> put c:\temp\KRB5_NT_SEV_HST\krb5.keytab
wsadmin>$AdminTask help validateKrbConfig
但是,如果已安装带有 SR3 的 JDK 1.6,那么不必如此。
结果
您已在 KDC 上创建 Kerberos 服务主体名称和密钥表文件,WebSphere Application Server 将使用该 KDC 来处理 SPNEGO 和/或 Kerberos 认证请求。