Kerberos 配置的已知问题 (SharePoint Server 2010)

 

适用于: SharePoint Server 2010

上一次修改主题: 2016-11-30

Kerberos 身份验证和非默认端口

存在一个已知问题:尝试向在非默认端口(80 和 443 以外的端口)上配置的启用 Kerberos 的 Web 应用程序进行身份验证时,一些 Kerberos 客户端(包括 .NET Framework、Internet Explorer 7 和 8)不能正确构成服务主体名称。问题的根本原因在于客户端不能通过指定不具有端口号的 SPN 在 TGS 请求中正确构成 SPN(如 TGS 请求的 Sname 所示)。

示例:

如果 Web 应用程序在 http://intranet.contoso.com:1234 中运行,则客户端将为 SPN 等于 http/intranet.contoso.com 而不是 http/intranet.contoso.com:1234 的服务请求票证。

可在以下文章中找到有关该问题的详细信息:

若要变通解决此问题,请注册同时具有和不具有端口号的 SPN。示例:

  • http/intranet

  • http/intranet.contoso.com

  • http/intranet:12345

  • http/intranet.contoso.com:12345

我们建议您注册非默认端口,以确保在将来的某个 Service Pack 或修补程序中解决该问题时,使用该变通解决方案的应用程序仍将继续正常运行。

请注意,如果满足以下条件,此变通解决方案不起作用:

  • 有多个 Web 应用程序在同一个非默认端口上运行

  • Web 应用程序绑定到服务器的主机名或者绑定到同一主机头(位于不同的端口上)

  • Web 应用程序的 IIS 应用程序池使用不同的服务帐户

如果满足这些条件,则按照此变通解决方案中的建议操作将导致重复 SPN 注册到不同的服务帐户,这将中断 Kerberos 身份验证。

如果共享通用主机名的多个网站在多个端口上运行,并且对 Web 应用程序使用不同的 IIS 应用程序池标识,则不能对所有网站使用 Kerberos 身份验证。(一个应用程序可以使用 Kerberos,其余应用程序将需要另一身份验证协议。)若要在这种情况下对所有应用程序使用 Kerberos,则需要执行以下操作之一:

  1. 使用一个共享服务帐户运行所有 Web 应用程序

  2. 使用每个网站自己的主机头运行每个网站

Kerberos 身份验证和 DNS CNAME

尝试向配置为使用 DNS CNAME 而不是 A 记录进行解析且启用 Kerberos 的服务进行身份验证的一些 Kerberos 客户端(包括 Internet Explorer 7 和 8)存在已知问题。问题的根本原因是客户端不能通过使用主机名(A 记录)而不是别名 (CNAME) 创建 SPN 在 TGS 请求中正确构成 SPN。

示例:

A 记录:wfe01.contoso.com

CNAME:intranet.contoso.com(别名 wfe01.contoso.com)

如果客户端尝试向 http://intranet.contoso.com 进行身份验证,则客户端不能正确构成 SPN,并且将为 http/wfe01.contoso.com 而不是 http/intranet.contoso.com 请求 Kerberos 票证

可在以下文章中找到有关该问题的详细信息:

https://support.microsoft.com/kb/911149/zh-cn

https://support.microsoft.com/kb/938305/zh-cn

若要变通解决此问题,请使用 DNS A 记录而不是 CNAME 别名配置启用 Kerberos 的服务。知识库文章中提到的修补程序将更正 Internet Explorer 中的这一问题,但不会更正 .NET Framework(Microsoft Office SharePoint Server 用于 Web 服务通信)中的问题。

Kerberos 身份验证和内核模式身份验证

备注

内核模式身份验证在 SharePoint 2010 产品中不受支持。此处提供的信息仅供参考。

从 IIS 7.0 版开始,有一种新身份验证功能,称为内核模式身份验证。IIS 网站配置为使用内核模式身份验证时,HTTP.sys 将对客户端的请求而不是应用程序池的工作进程进行身份验证。因为 HTTP.sys 在内核模式下运行,这不仅可以提高性能,还可以在配置 Kerberos 时提高复杂度。这是由于 HTTP.sys 使用计算机的标识而不是工作进程的标识运行。HTTP.sys 收到 Kerberos 票证时,默认情况下它将尝试使用服务器的加密密钥(即机密)对票证进行解密,而不是对工作进程运行时所使用标识的密钥进行解密。

如果单个 Web 服务器配置为使用内核模式身份验证,则 Kerberos 无需任何其他配置或其他 SPN 即可正常工作,因为 HOST SPN 添加到域时服务器将自动对它进行注册。如果在多个 Web 服务器之间建立负载平衡机制,则默认内核模式身份验证配置将不起作用,或至少将出现间歇性故障,因为客户端无法确保在 TGS 请求中收到的服务票证可用于对请求进行身份验证的服务器。

若要变通解决此问题,可以执行以下操作:

Kerberos 身份验证和基于会话的身份验证

对 IIS 7.0 和更高版本使用 Kerberos 身份验证时,您可能会注意到身份验证流量有所增加。这可能与 IIS 中的 Windows 身份验证设置相关,尤其是:

AuthPersistNonNTLM

可选的布尔属性。

指定 IIS 是否自动对每个非 NTLM(例如,Kerberos)请求重新进行身份验证,即使这些请求位于同一连接上。True 允许对同一连接进行多次身份验证。

默认值为 False。

备注

设置 False 意味着在同一连接上仅对客户端进行一次身份验证。IIS 将在服务器上为建立的 TCP 会话缓存令牌或票证。

authPersistSingleRequest

可选的布尔属性。

将此标记设置为 True 可指定身份验证仅对连接上的单个请求有效。IIS 在每个请求结束时重置身份验证,并强制对会话的下一请求重新进行身份验证。

默认值为 False。

有关如何在 IIS 7.0 中配置身份验证持久性的说明,请参阅在 IIS 7.0 中将集成 Windows 身份验证与 Kerberos 身份验证协议一起使用时性能可能会降低实施访问控制(该链接可能指向英文页面)

Kerberos 身份验证和重复/缺少 SPN 问题

配置 Kerberos 身份验证时,很容易意外配置重复的服务主体名称,使用 SetSPN -A 或 ADSI 编辑 (adsiedit.msc) 工具创建 SPN 时尤其如此。常规建议是使用 SetSPN -S 创建 SPN,因为 -S 开关将在创建指定的 SPN 之前检查重复 SPN。

如果您怀疑环境中有重复的 SPN,请使用 SetSPN -X 命令查询环境(仅 Windows 2008 或更高版本)中的所有重复 SPN。如果返回任何 SPN,则您应该调查为什么会注册这些 SPN 并删除重复且不需要的任何 SPN。如果两个服务使用两个不同的标识运行,并且二者使用相同的 SPN(重复 SPN 问题),则您需要重新配置其中一个服务,以使用不同的 SPN 或共享同一服务标识。

如果您怀疑 SPN 尚未注册或者未以所需格式注册,则可以使用 SetSPN -Q <insert SPN> 查询特定 SPN 是否存在。

Kerberos 最大令牌大小

在一些环境中,用户可能是许多 Active Directory 组的成员,这可能会增加 Kerberos 票证的大小。如果票证变得太大,Kerberos 身份验证可能会失败。有关如何调整最大令牌大小的详细信息,请参阅用户属于许多组时 Kerberos 身份验证问题的新解决方法 (https://support.microsoft.com/kb/327825/zh-cn)。

备注

调整最大令牌大小时,请注意,如果配置的最大令牌大小超出了注册表设置的最大值,则可能会遇到 Kerberos 身份验证错误。建议最大令牌大小不超过 65535(十进制)或 FFFF(十六进制)。

适用于 Windows Server 2008 和 Windows Vista 的 Kerberos 身份验证修补程序

使用 AES 算法时 Kerberos 身份验证在运行 Windows Server 2008 或 Windows Vista 的计算机上失败,并出现错误代码 0X80090302 或 0x8009030f (https://support.microsoft.com/kb/969083/zh-cn).

您可能需要在环境中运行 Windows Server 2008 或 Windows Vista 的所有计算机上安装 Kerberos 身份验证修补程序。这包括 SharePoint Server 尝试使用 Kerberos 身份验证向其进行身份验证并且运行 SharePoint Server 2010、SQL Server 或 Windows Server 2008 的所有计算机。如果遇到支持案例中记录的症状,请按照支持页上的说明操作以应用修补程序。