适用于: 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 的服务请求票证。
可在以下文章中找到有关该问题的详细信息:
在 Windows XP 和 Windows Server 2003 中 Internet Explorer 6 无法使用 Kerberos 身份验证协议连接到使用非标准端口的网站 (https://support.microsoft.com/kb/908209/zh-cn)
配置 Kerberos 身份验证 (Office SharePoint Server 2007) (https://go.microsoft.com/fwlink/?linkid=196987&clcid=0x804)
若要变通解决此问题,请注册同时具有和不具有端口号的 SPN。示例:
http/intranet
http/intranet.contoso.com
http/intranet:12345
http/intranet.contoso.com:12345
我们建议您注册非默认端口,以确保在将来的某个 Service Pack 或修补程序中解决该问题时,使用该变通解决方案的应用程序仍将继续正常运行。
请注意,如果满足以下条件,此变通解决方案不起作用:
有多个 Web 应用程序在同一个非默认端口上运行
Web 应用程序绑定到服务器的主机名或者绑定到同一主机头(位于不同的端口上)
Web 应用程序的 IIS 应用程序池使用不同的服务帐户
http://server.contoso.com:5000 AppPool Id: contoso\svcA
http://server.contoso.com:5001 AppPool Id: contoso\svcB
如果满足这些条件,则按照此变通解决方案中的建议操作将导致重复 SPN 注册到不同的服务帐户,这将中断 Kerberos 身份验证。
如果共享通用主机名的多个网站在多个端口上运行,并且对 Web 应用程序使用不同的 IIS 应用程序池标识,则不能对所有网站使用 Kerberos 身份验证。(一个应用程序可以使用 Kerberos,其余应用程序将需要另一身份验证协议。)若要在这种情况下对所有应用程序使用 Kerberos,则需要执行以下操作之一:
使用一个共享服务帐户运行所有 Web 应用程序
使用每个网站自己的主机头运行每个网站
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 请求中收到的服务票证可用于对请求进行身份验证的服务器。
若要变通解决此问题,可以执行以下操作:
禁用内核模式身份验证
将 HTTP.sys 配置为对服务票证进行解密时使用 IIS 应用程序池的标识。请参阅 Internet Information Services (IIS) 7.0 内核模式身份验证设置(该链接可能指向英文页面)。
将 HTTP.sys 配置为使用应用程序池的凭据时可能还需要一个修补程序:修复:在 IIS 7.0 中,当 AppPoolCredentials 属性设置为 true 并且您使用域帐户作为应用程序池标识时,蓝色屏幕上出现 Stop 0x0000007e 错误消息
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 的所有计算机。如果遇到支持案例中记录的症状,请按照支持页上的说明操作以应用修补程序。