了解 SPN
SPN 是 Kerberos 配置中难度较大的环节之一,因为它们要作为被授权访问特定服务器资源的客户端资源的唯一标识符注册到 KDC。在集成 Windows 身份验证中,客户端和服务器必定信任 KDC,因为在几乎所有情况下,KDC 还是域控制器,它需要一种方法来确定是否为请求授予票证,这种方法就是 SPN。正如上文所述,当您为应用程序池设置域用户帐户时,还必须针对帐户设置 SPN,以便让所有人都能访问与应用程序池关联的 Web 应用程序。
SPN 是在服务器上运行的服务的唯一标识符字符串。它存储在 Active Directory 中用户帐户的名为 Service-Principal-Name 的多值属性中。一台主机或多台主机上的多项服务可以根据它们的唯一 SPN 进行区分。也许我过分强调了 SPN 的重要性,但这样做是有充分理由的。配置不当的 SPN 会破坏 Kerberos 身份验证。如果您设置了两个相同的 SPN,或者忘记设置 SPN,或者错误配置了 SPN 的某一部分,则身份验证将无法正常进行。
让我们来看一个 SPN 示例,以了解 Kerberos 如何使用 SPN。SPN 包括三个部分:标识服务类型的服务类、运行服务的主机的计算机名称、端口。这几个部分组合在一起,语法为:服务类/主机:端口。对于 SharePoint,有两个相关名称是 HTTP 和 MSSqlSvc。这两个服务名称不是任意的,而是定义为服务的特定别名。主机名部分是 FQDN 或 NetBIOS 名称,可以选择是否包括端口。注册 SPN 时,非常好的做法是同时为 NetBIOS 和 FQDN 主机名注册 SPN,以便无论客户端使用什么方法,它们都可以访问目标主机上的资源。
在上文中,我曾提到除非在网络服务帐户下运行应用程序池,否则就需要显式注册 SPN。这是因为当计算机加入到 Active Directory 域时,将自动为计算机帐户创建 SPN,其格式为 HOST/ 和 HOST/。由于网络服务帐户作为网络上的一台计算机,因此 SPN 对它有效。但是,出于安全考虑,再加上本地帐户可能会破坏某些方案,因此使用本地网络服务帐户并不是非常好的做法。例如,如果您要还原或附加使用网络服务帐户配置的内容数据库,则必须将该帐户添加到 SQL Server 上的本地管理员组,在附加数据库之后再将其删除。大多数现有文档推荐使用域帐户。
后端配置
无论您是从现有场迁移,还是安装新场,您都必须首先在 SQL Server 上配置 Kerberos 身份验证。SQL Server 必须满足上文所述的要求,例如加入到域、可以访问充当 KDC 的域控制器等。对于大多数环境而言,当使用集成了 DNS 的 Active Directory 时,在默认情况下可以满足这些要求。如果您的环境仅使用前端 SharePoint 服务器,而没有使用应用程序服务器(例如运行 Excel Services 或 SQL Reporting Services 的服务器),则不需要显式配置 Kerberos。对于基本的前端/后端连接,在 SQL Server 加入到域时创建的默认 SPN 足以满足要求。
在 SQL Server 上,配置 Kerberos 相对比较简单。首先,您要设置相关 SPN,然后验证使用的是否是 Kerberos 而不是默认的 NTLM。您应该设置 NetBIOS 名称和 FQDN,格式为 MSSQLSvc/<NetBIOS_Name>:1433 和 MSSQLSvc//<FQDN-hostname.domain.local>:1433,此处假定您的实例使用默认的 1433 端口。虽然您可以使用 setspn 工具或 ADSIEdit 来设置 SPN,但 setspn 通常是更好的选择,因为它可以验证输入的语法,以确保输入正确。相反,使用 ADSIEdit 时,您要直接将 SPN 写入 servicePrincipalName 属性。若要创建两个 SPN,请运行setspn-A MSSQLSvc/<NetBIOS_Name>:1433 <domain>\<username> 和 setspn-A MSSQLSvc/<FQDNe>:1433 <domain>\<username>
,其中用户名为 SQL Server 服务帐户。
若要确认 SQL Server 流量使用的是 Kerberos,您可以使用 Wireshark 等数据包分析器跟踪流量,也可以使用 Kerbtray.exe 等工具,或者检查事件日志。如果您使用 SQL Server Management Studio 连接到 SQL 实例,则安全事件日志将显示事件 ID 540,其中的登录进程和身份验证数据包使用 Kerberos。有关详细信息,请参阅为 SQL 通信配置 Kerberos 身份验证。
前端和应用程序服务器配置
确保 Kerberos 在 SQL Server 中正常工作后,接下来您可以配置 SharePoint,包括为应用程序池设置 SPN,为 SSP 和 Web 应用程序启用 Kerberos,并完成一些最终配置步骤。SPN 配置类似于 SQL Server 服务帐户的配置,但需要配置更多的 SPN。回顾一下,SPN 是基于用户在客户端浏览器地址栏中输入的地址构造的,因此您必须为用户可能在地址栏中输入以访问网站的每个条目设置 SPN。这包括采用主机头格式的 FQDN、NetBIOS 名称和别名。图 4 列出了资源类型示例以及需要为每个资源类型注册的 SPN。
图 4 基本 MOSS 场的 SPN
在设置 SPN 时,应该记住一些注意事项。首先,SPN 要注册到启用 SharePoint 的网站,正如要注册到任何 IIS 网站那样。重要的是指定正确的主机名和帐户,每个网站的应用程序池在该帐户下运行。如果使用多个主机头,请确保为所有主机头设置 SPN。第二,不需要指定 HTTP 和 HTTPS 端口,但应该指定任何自定义端口。第三,您可能还需要配置其他一些依赖关系,例如配置针对 IIS 的注册表更改以支持带有自定义端口的 SPN 格式,以及配置更新以支持 SSP。您可以在配置 Kerberos 身份验证 (Office SharePoint Server) 中找到更多详细信息。