如何解决 IIS 中与 Kerberos 相关的问题

文章翻译 文章翻译
文章编号: 326985 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文介绍如何解决 Internet 信息服务 (IIS) 服务器上的 Kerberos 身份验证问题。本文不是一个完整的指南,但可以帮助您解决大多数有可能遇到的 Kerberos 问题。

默认情况下,在 Microsoft Windows 2000 Server 上安装 IIS 时,元数据库中的 NTAuthenticationProviders 键会被设置为 Negotiate, NTLM。这意味着当 Microsoft Internet Explorer 5.0 或更高版本的客户端连接到网站时,IIS 在 WWW-Authenticate 标头中返回这两个值。出现这种情况时,客户端要决定使用哪种身份验证方法进行连接。如果客户端决定使用 Negotiate 方法进行连接,则客户端会与服务器协商以决定是使用 Kerberos 还是使用 NTLM 进行身份验证。如果客户端不支持 Negotiate 方法,则它将使用 NTLM 进行身份验证。

注意,这是关于该过程的工作原理的高度概述。当涉及到 Kerberos 时,还会出现许多您可能没有注意到的事情。

如果 Internet Explorer 客户端可通过 Kerberos 协议进行连接,就会执行其他一些安全检查。例如,客户端可从 Ticket Granting Service (TGS) 获得一个票证,然后使用此票证进行身份验证。

有关此过程如何工作的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
217098 Windows 2000 中的 Kerberos 用户身份验证协议基本知识概述
有关更多信息,请访问下面的 Microsoft 网站:
身份验证http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/default.mspx?mfr=true
您必须熟悉这些参考资料才能解决 Kerberos 问题。

注意:如果您最近已经升级到 Internet Explorer 6.0,则可能会遇到 Kerberos 问题,因为默认情况下不会选中“启用集成 Windows 身份验证”复选框。 有关如何确保正确地设置此选项的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
299838 升级到 Internet Explorer 6 后无法协商 Kerberos 身份验证

检查身份验证方法

请确认正确的身份验证方法已在 IIS 服务器或特定网站的元数据库中列出。如果服务器是从 Microsoft Windows NT 4.0 升级到 Windows 2000 的,则 Negotiate 身份验证方法将不可用,您必须手动添加它。如果不是从 Windows NT 4.0 升级到 Windows 2000 的,请确保有合适的身份验证方法可供使用。 有关如何验证 Negotiate 身份验证方法是否可用,以及当此方法不可用时如何添加该方法的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
248350 在从 IIS 4.0 升级到 IIS 5.0 后 Kerberos 身份验证失败
注意,您可以在网站级别设置此身份验证方法,而不是针对整个 IIS 服务器进行设置。为此,请使用 Adsutil.vbs 脚本添加网站编号。例如,要仅为默认网站设置身份验证方法,请使用下面的命令:

cscript adsutil.vbs set w3svc/1/NTAuthenticationProviders "Negotiate,NTLM"
“w3svc”后面的 1 就是 Internet 服务管理器 (ISM) 中列出的网站编号。

确定服务器名

接下来,确定您是使用服务器的真实 NetBIOS 名还是使用别名(例如 DNS 名,如 www.microsoft.com)连接到网站的。如果不是使用服务器的真实名称访问 Web 服务器,则必须先使用 Windows 2000 Server 资源工具包中的 Setspn 工具注册一个新的服务主体名称 (SPN)。因为 Active Directory 不知道该服务名称,所以 TGS 不会给您一个对用户进行身份验证的票证。这就强制客户端使用下一个可行的身份验证方法 (NTLM) 进行重新协商。如果 Web 服务器响应 www.microsoft.com 的域名系统 (DNS) 名称,但服务器被命名为 webserver1.development.microsoft.com,您就必须在每个 IIS 服务器上的 Active Directory 中注册 www.microsoft.com。为此,您必须下载 Setspn 实用工具并将其安装在 IIS 服务器上。

有关如何下载 Setspn 实用工具的更多信息,请访问下面的 Microsoft 网站:
Setspn.exehttp://www.microsoft.com/downloads/details.aspx?FamilyID=4e3a58be-29f6-49f6-85be-e866af8e7a88&displaylang=en 要确定是否使用了真实名称进行连接,请尝试使用真实名称而不是 DNS 名称连接到服务器。如果无法连接到服务器,请转到“验证是否信任计算机进行委派 ”一节。如果能够连接到服务器,请遵循以下步骤为您正用来连接到服务器的 DNS 名设置 SPN。
  1. 安装 Setspn 实用工具。
  2. 在 IIS 服务器上打开命令提示符,然后更改为 C:\Program Files\Resource Kit 目录。
  3. 运行下面的命令将新的 SPN (www.microsoft.com) 添加到服务器的 Active Directory 中,其中 webserver1 是服务器的 NetBIOS 名称:
    Setspn -A HTTP/www.microsoft.com webserver1
    您接收的输出类似于:
    Registering ServicePrincipalNames for CN=webserver1,OU=Domain Controllers,DC=microsoft,DC=com
    HTTP/www.microsoft.com
    Updated object
    							
  4. 要查看服务器上的 SPN 列表以检查这个新的值,请在此 IIS 服务器上键入以下内容:Setspn -L webservername
注意,您不必注册所有服务。包括 HTTP、W3SVC、WWW、RPC、CIFS(文件访问)、WINS 和不间断电源供应 (UPS) 在内的许多服务类型都映射到名为 HOST 的默认服务类型。例如,如果客户端软件使用 HTTP/webserver1.microsoft.com 的 SPN 通过 HTTP 连接到 webserver1.microsoft.com 服务器上的 Web 服务器,但此 SPN 未在该服务器上注册,则 Windows 2000 域控制器会自动将其映射到 HOST/webserver1.microsoft.com。此映射仅当 Web 服务在本地系统帐户下运行时才适用。

验证是否信任计算机进行委派

如果此 IIS 服务器是域成员但不是域控制器,则必须信任计算机进行委派,Kerberos 才能正常工作。要启用此功能,请按照下列步骤操作:
  1. 在域控制器上,单击开始,指向设置,然后单击控制面板
  2. 双击管理工具文件夹,然后双击 Active Directory 用户和计算机
  3. 在您的域下面,单击计算机文件夹。
  4. 在列表中,查找 IIS 服务器。右键单击服务器名称,然后单击属性
  5. 单击常规选项卡,单击以选中已为委派信任复选框,然后单击确定

使用 Kerbtray

另一个在解决 Kerberos 问题时非常有用的实用工具是 Kerbtray.exe,它是 Windows 2000 资源工具包的一部分。通过使用 Kerbtray,您可以查看本地高速缓存中已授予的 Kerberos 票证。要下载此实用工具,请访问下面的 Microsoft 网站:
Kerbtray.exe:Kerberos Trayhttp://www.microsoft.com/downloads/details.aspx?FamilyID=4e3a58be-29f6-49f6-85be-e866af8e7a88&displaylang=en
有关此工具以及解决 Kerberos 问题的方法的更多信息,请访问下面的 Microsoft 网站:
Authentication for Administrative Authorityhttp://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/bestprac/authent.mspx

启用安全事件记录

安全事件记录在解决 Kerberos 身份验证失败的问题时能起到巨大的作用。启用此功能时,当有用户试图通过 IIS 进行身份验证时您可以看到登录失败。这为身份验证过程中可能出现的情况以及身份验证过程失败的原因提供了解释。

本节中的其余信息直接引用自 Michael Howard 的 Desiging Secure Web Based Applications for Windows 2000。 因为 Windows 2000 中的连接要进行身份验证,所以您需要了解如何阅读登录事件。本节的目的是解释登录事件中包含的各个变量。

登录/注销审计设置

Microsoft Windows NT 为登录和注销仅提供了一个审计类别。Windows 2000 则还提供了另外一个审计类别。这两个类别(登录/注销和帐户登录)将在以下几节中介绍。

审计帐户登录事件(“登录/注销”类别)

在 Windows NT 和 Windows 2000 的所有版本中都提供了此事件类别,它表示有帐户登录或注销,或是建立了到计算机的网络连接。换言之,审计事件是在出现登录的计算机上触发的。登录/注销类别很重要,因为在使用 IIS、SQL Server 和 COM+ 时它会提供大多数信息。

登录/注销类别中最有意义的事件是
  • 登录/注销事件 529(登录失败)
  • 登录/注销事件 528(登录成功)
  • 登录/注销事件 540(网络登录成功)
以下几节显示了这些事件, 表 1 解释了这些事件中的每个字段。

登录/注销事件 529(登录失败)

事件类型:失败审核
事件来源:安全性
事件类别:登录/注销
事件 ID:       529
日期:           9/3/1999
时间:8:57:21 PM
用户:NT AUTHORITY\SYSTEM
计算机:CHERYL-LAPTOP
描述:
登录失败:
原因:用户名未知或密码错误
用户名:Administrator
域:CHERYL-LAPTOP
登录类型:       2
登录过程:seclogon
身份验证数据包:协商
工作站名:CHERYL-LAPTOP

				

登录/注销事件 528(登录成功)和登录/注销事件 540(网络登录成功)

事件类型:成功审核
事件来源:安全性
事件类别:登录/注销
事件 ID:       540
日期:           1/23/2000
时间:5:41:39 PM
用户:EXAIR\Cheryl
计算机:CHERYL-LAPTOP
描述:
成功的网络登录:
用户名:cheryl
域:EXAIR
登录 ID:(0x0,0x17872A8)
登录类型:       3
登录过程:Kerberos
身份验证数据包:Kerberos
工作站名:

				
收起该表格展开该表格
字段注释
事件类型、源、目录、ID、日期和时间这些字段一看就明白
用户
执行登录的用户帐户。例如,这可能是 NT AUTHORITY\SYSTEM,这是用于启动许多 Windows 2000 服务的 LocalSystem 帐户。
计算机 发生事件的计算机
原因仅适用于登录失败;是帐户登录失败的原因。
用户名试图登录的用户帐户的名称
用户帐户试图登录的域。
登录类型 一个用以标识试图进行的登录之类型的数值。可能的值:
2 - Interactive(交互式登录)
3 - Network(通过网络访问系统)
4 - Batch(作为批处理作业启动)
5 - Service(由服务控制器启动的 Windows 服务)
6 - Proxy(代理登录,不用于 Windows NT 或 Windows 2000)
7 - Unlock(未锁定工作站)
8 - NetworkCleartext(网络登录时使用明文凭据)
9 - NewCredentials(使用 /netonly 选项时由 RunAs 使用)
登录进程执行登录的进程。以下是一些示例登录进程:
- Advapi(由对 LogonUser 的调用触发;LogonUser 调用 LsaLogonUser,其中使用的一个参数 OriginName 标识登录尝试的起源)
- User32(使用 WinLogon 的常规 Windows 2000 登录)
- SCMgr(启动了一个服务的服务控制管理器)
- KsecDD(到 SMB 服务器的网络连接 - 例如,使用 NET USE 命令时)
- Kerberos(Kerberos 安全支持提供程序 [SSP])
- NtlmSsp (NTLM SSP)
- Seclogon(辅助登录 - 即 RunAs 命令)
- IIS(执行登录的 IIS;在登录 IUSR_machinename 帐户或使用 Digest 或 Basic 身份验证时生成)
身份验证数据包 试图登录帐户时调用的安全数据包。身份验证数据包是分析登录数据并决定是否对帐户进行身份验证的动态链接库 (DLL)。最常用的有 Kerberos、Negotiate、NTLM 和 MICROSOFT_AUTHENTICATION_PACKAGE_V1_0(也称 MSV1_0;可对 SAM 数据库中的用户进行身份验证,支持对受信任域中帐户进行 pass-through 身份验证,支持子身份验证数据包)Workstation Name(如果已知)登录者在登录期间使用的工作站名。

审计帐户登录事件(“帐户登录”类别)

此事件类别表示执行了一次帐户登录或注销,而且使用计算机验证了此帐户。在此情况下,审计事件在帐户驻留的计算机上被触发。当启用了此审计类别时,会记录许多与 Kerberos 相关的事件(例如票证发放)。

以下几节显示两种常见的帐户登录失败事件。

帐户登录事件 676(登录失败):身份验证票证请求失败
事件类型:失败审核
事件来源:安全性
事件类别:帐户登录
事件 ID:       676
日期:           5/11/2000
时间:8:47:01 PM
用户:NT AUTHORITY\SYSTEM
计算机:DBSERVER
描述:
身份验证票证请求失败:
用户名:Major
提供的领域名:EXPLORATIONAIR.COM
服务名称:krbtgt/EXPLORATIONAIR.COM
票证选项:0x40810010
失败代码:     6
客户地址:   172.100.100.12

				
注意:什么是 NT AUTHORITY\SYSTEM 帐户?此帐户通常称为 LocalSystem;这是大多数服务都在其中运行的帐户。在安全事件日志中会多次看到对此帐户的引用。

事件 676 表示 Major 无法从密钥发行中心 (KDC) 获得初始的授予票证的票证 (TGT)。此事件中最重要的部分是失败代码。这些代码与 MIT Kerberos 代码相同。 表 2 介绍一些最常见的失败代码;完整列表可在以下位置找到 Kerberos Request For Comments:RFC 1510.

表 2 - 一些常见的 Kerberos 失败代码
收起该表格展开该表格
失败代码注释
6 无法在 Kerberos 数据库中找到客户端。
7 无法在 Kerberos 数据库中找到服务器。这通常表示尚未为此服务注册服务主体名称 (SPN)。
23 密码已过期。
32 票证已过期。
33 票证尚未生效。
34 请求为重放。有人正试图重放 Kerberos 客户端的响应;您可能正受到攻击。
37 时钟严重偏移。Kerberos 对时间很敏感;请确保所有时钟都同步


错误代码极大的帐户登录事件 681(登录失败)

您有时可能会看到如下所示的错误。问题是错误代码实际上没有意义。
事件类型:失败审核
事件来源:安全性
事件类别:帐户登录
事件 ID:       681
日期:           5/11/2000
时间:8:47:01 PM
用户:NT AUTHORITY\SYSTEM
计算机:DBSERVER
描述:
登录到帐户:Major
登录的用户:MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
从工作站:WEBSERVER
未成功。错误代码是: 3221225572

				
表 3 - 示例帐户登录错误代码。

收起该表格展开该表格
错误代码(十进制)错误代码(十六进制)注释
32212255720xC0000064指定的用户不存在。
3221225570 0xC0000062提供的帐户名称格式不正确。
32212255690xC0000061客户端不具有要求的特权。
32212255780xC000006A试图更新密码时,返回状态表示作为当前密码提供的值不正确。
32212255800xC000006C密码不正确。试图更新密码时,此状态表示违反了某个密码更新规则。例如,密码可能不符合长度标准。
32212255850xC0000071用户帐户的密码已过期。
32212255860xC0000072 引用的帐户当前被禁用。

如果您将前面的两个安全故障事件相关联 -- 当 Major 试图登录时,他的初始 TGT 请求失败,错误代码为 6(无法在 Kerberos 数据库中找到客户端);出现常见错误,错误代码为 3221225572(指定的用户不存在)-- 很容易看出错误的原因是:Major 不是有效帐户!

参考

有关 Kerberos 的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
266080 Kerberos 常见问题解答
244474 在 Windows Server 2003、Windows XP 和 Windows 2000 中如何强制 Kerberos 使用 TCP 而不是 UDP
262177 如何启用 Kerberos 事件日志记录
287537 使用基本身份验证生成 Kerberos 令牌
277741 Internet Explorer 登录因用于 Kerberos 的缓冲区不足而失败
269643 Internet Explorer Kerberos 身份验证因连接到 IIS 的缓冲区不足而无法工作
264921 INFO:IIS 如何验证浏览器客户端
248350 在从 IIS 4.0 升级到 IIS 5.0 后 Kerberos 身份验证失败
294382 网站的“Host Header”与服务器的 NetBIOS 名称不同时身份验证会失败并产生“401.3”错误
217098 Windows 2000 中的 Kerberos 用户身份验证协议基本知识概述
283201 如何在 Windows 2000 中通过 COM+ 使用委派
299838 升级到 Internet Explorer 6 后无法协商 Kerberos 身份验证
230476 Windows 2000 中常见 Kerberos 相关错误说明
320903 客户端无法通过在 TCP 上使用 Kerberos 进行登录
235529 基于 Windows 2000 Server 群集上的 Kerberos 支持
Kerberos 常见问题解答包含有关 Kerberos 协议的其他信息:
Kerberos FAQ, v2.0

属性

文章编号: 326985 - 最后修改: 2007年3月2日 - 修订: 10.1
这篇文章中的信息适用于:
  • Microsoft Internet Information Services 5.0
关键字:?
kbhowtomaster KB326985
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com