用 Kerberos 进行 SharePoint 身份验证

来自: http://technet.microsoft.com/zh-cn/magazine/ee914605.aspx

 

 

尽管如此 SharePoint 提供了大多单身份验证选项和身份验证区域,但于 Intranet
方案遭店落实之少数个极度广选项还是 NTLM 和
Kerberos。这点儿栽协议还用于典型的质疑/响应方案被的合龙 Windows
身份验证。NTLM 依赖让 IIS
在质疑过程中生成令牌,将令牌发送至客户端,客户端用令牌进行响应,域控制器验证该应。NTLM
要求于传用户称及密码之前要对它进行加密,还求以拜访新网络资源时重开展身份验证(新令牌)。相反,Kerberos
则指让一个字系统,其中的客户端与服务器访问一个号称也密钥发行中心 (KDC)
的被信赖颁发机构,KDC
将应客户端请求,并与相应票证,客户端可采用该字访问网络资源。Kerberos
不需重新进行身份验证来访问多个资源。

此时此刻的绝大多数文档都倡导用
NTLM,除非是来某种专门迫切的需求,例如抱有强安全服务级别协商的网站面临的需求。即便于这种状态下,如果你更加探索的话,使用
NTLM
仍是若的首选:它重便于落实,无需额外步骤,而且能抽支持问题。例如,知识库文章
832769
写道:“…或无法安排服务重头戏名称 (SPN),请捎 NTLM 身份验证。如果您选择
Kerberos 身份验证但无法安排 SPN,则只有服务器管理员能由此 SharePoint
网站的身份验证。”这个说法在技术上是准确的,但它若产生平等交汇隐含意思:配置
SPN 过于复杂,除非有人要求实现 Kerberos,否则都应本着 Kerberos
避而远之。但事实是,如果您了解原理,实现 Kerberos 并无是那窘迫。

我们发出许多靠边的理来诠释为何当转换到
Kerberos,或者在新实现之系受前后使用
Kerberos,但在大部情下,这些理由都好归纳为性还是安全性。随着用户负载或拓扑复杂性的充实,NTLM
可能会见吸引性能问题,因为于不少 SharePoint 使用方案中(例如访问
SharePoint Web 部件或于定义 Web 服务的 Web 应用程序),基于 NTLM
的身份验证必定要以 IIS
和域控制器之间反复过往。如果通过低速或高延迟链路来访问域控制器,则充分有或出现性能问题。就安全性而言,采用网络资源显式委派的因票证的系统
(Kerberos)
在计划上较仅仅加密用户凭据的措施更加安全。而且它快又快,因为其只是以单个票证即可访问多个网资源。

多安装最初还动 NTLM 而非是
Kerberos,因为计划拓扑、服务器规模调整、安全支持提供程序 (SSP)
以及任何复杂细节都令人望而生畏了,如果进一步提高复杂性,会为用户觉得无法。这种看法有夫合理性之远在。不管怎么说,启用了
Kerberos 的落实难免会出现问题。只要看知识库文章
871179、962943

832769,便可了解及或出现的有些题目,这些题目或许与蓝屏
STOP 错误一样严重。即便是现有文档,例如 Microsoft 的 Kerberos
详细实现指南,也没包括关于
IIS 版本 7
或再次强版本的详细信息,这些本子实现了基本模式身份验证功能,并转了拍卖
SPN 的章程。但绝不操心,如果你了解 SharePoint 如何运用 Kerberos
的基本概念,则实现同布局 Kerberos
会变得相对简单有。本文介绍了骨干的体系结构组件,还包有安排详细信息,可以帮忙而入门。Microsoft
已宣布了含分步详细信息的文档,以及知识库文章
832769 和
953130,可为卿提供再多参考。

身份验证组件和倚重关系

第一,我们将了解处理并 Windows 身份验证的 SharePoint
体系布局中之仗关系。从极度基本的框框上来讲,无论是以 NTLM 还是
Kerberos,都见面时有发生一个客户端向启用 SharePoint 的 .aspx
网页发出请求,该网页在后台使用 .NET 和 IIS。与此同时,该网页还借助让 SQL
Server 配置以及情节数据库被的数额。图 1 显示了 IIS 如何在 SharePoint
2007 上下文中处理同身份验证相关的伸手。当客户端浏览器发出 Web
请求时,将当 IIS 中启动一个线程,且和该要相关的目标(例如,包含在
IPrincipal 对象吃之 IIdentity
对象所蕴含的令牌)将给增大到线程。从编程角度而言,IIdentity 和 IPrincipal
对象清一色经过 HttpContext.User 属性访问,而当时点儿只目标和该属性均由 .NET
管道被蕴含的身份验证模块设置,如图 1 所示。

图片 1.png)

图 1 SharePoint 中的通用身份验证组件和数据流

以下流程详细说明了数据流:

  1. 客户端浏览器通过匿名 HTTP GET 请求初始化与 SharePoint
    前端服务器的连(由带有 .NET 的 IIS 处理)。
  2. 假如该区域布局了匿名访问(例如当 Internet 方案被),则 IIS
    将继承处理该要。否则,IIS 将回到错误 401.2
    并要从客户端浏览器中开展身份验证。
  3. 客户端浏览器接收请求,并依据区域及涉及的选项项针对客户端进行身份验证。常因此智是调用
    AcquireCredentialsHandle 并提示输入用户名/密码,然后经过 IIS
    将身份验证令牌返回 SharePoint。
  4. IIS 正在 HTTP
    会话中等待响应并接受身份认证令牌,然后授权或拒绝访问。此时,IIS 通过
    .NET 将请传递让 SharePoint。
  5. 假定请的页面包含需要拜访后端 SQL 数据库的 Web 部件,则 SharePoint
    将展开 SQL Server 身份验证并走访数据库。SQL
    身份验证的特征因安排选项而异。例如,您可以安排利用 NTLM 或 Kerberos
    的 SQL Server 身份验证或集成 Windows 身份验证。下文将介绍 Kerberos
    和 NTLM 的具体内容。

SharePoint
中身份验证机制的关键所在是以下三个层分别用个别的意义:客户端浏览器、带有
.NET 的 IIS 以及 SQL Server。为了回就编译的 .aspx
页,身份验证和授权都于客户端、IIS 和 SQL Server
之间展开。有时候就一流程为会简化,例如在 SQL Server 与 IIS
位于同一物理服务器中的事态下利用 NTLM
进行身份验证时。在这种情况下,从客户端到 IIS 只来一个跃点。有关 .NET
中之身份验证的详细信息,请参考说:ASP.NET 2.0 中之 Windows
身份验证。

NTLM 和 Kerberos

现而曾经了解了 Windows Server、IIS 和 .NET
用于对用户展开身份验证和授权的功底机制,下面我们以证明什么通过这种机制使
NTLM 和 Kerberos 进行合并 Windows 身份验证。正使齐文所述,NTLM 和
Kerberos 之间的要区别在:NTLM
使用质询/响应机制,在看每个网络资源时都待展开身份验证和授权;而
Kerberos
则利用票据系统,只待进行同样次于身份验证,然后通过委派进行授权。如果您不太明了就同一差距,也毫不担心,下面我以进行详尽说明。
2
说明了 SharePoint 在行使 NTLM 时什么处理要。

图片 2.png)

图 2 SharePoint 中的 NTLM 身份验证

图 2 所示,使用 NTLM
需要一个力所能及针对用户展开身份验证的域控制器。如果域在本机模式下运作,则默认情况下必须以域控制器或任何一个服务器上生一个大局编录。除了双跃点问题之外,这也是一个私的习性问题,因为于与域控制器取得联系下,如果地方没有大局编录可用,则会透过代理将身份验证请求发送到全局编录服务器。在链路速放缓的情形下,这或许会见消耗大量之资源及带富。您可想尽设法加强
NTLM 身份验证的性质,例如通过转 MaxConcurrentApi
注册表项的值,但迅即无法解决 NTLM
需要借助质询/响应方案的固要求,也束手无策解决高负荷下之相干性能问题。

同一域中之帐户的 NTLM 身份验证的详细信息如下所示:

  1. 流程按上文所陈述之不二法门开,客户端浏览器采用 HTTP GET
    请求来初始化与运行带有 .NET 的 IIS 的 SharePoint
    前端服务器的连续,并尝试以匿名方式开展身份验证。
  2. IIS 拒绝匿名请求,返回 401.2 错误,并作回以 NTLM
    (WWW-Authenticate: NTLM) 进行身份验证的乞求。
  3. 客户端浏览器接收该要,并调用 InitializeSecurityContext
    以创办包含域和处理器名称的身份验证令牌,然后拿该身份验证令牌发送至
    IIS。
  4. IIS 接受详细信息,并为客户端发送 NTLM 质询。
  5. 客户端应用已因此用户密码进行了加密之质询响应(即身份验证令牌)进行响应。
  6. 这,IIS 需要同域控制器会话。它发送客户端的用户称、质询和质疑响应。
  7. 域控制器检索用户的密码哈希,并将该与以用户凭据加密的质问响应进行比较。如果两岸配合,域控制器将为
    IIS 返回身份验证成功消息,IIS 可与客户端浏览器会话。
  8. 这,Web 应用程序将朝 SQL Server 进行身份验证,可以看包含 .aspx
    页数据的情节数据库。

假使你就尝试以“管理中心”网页上吗中心安装配备
Kerberos,那么您便知道,如果选 Kerberos 而休是
NTLM,生成的信将唤起而安排应用程序池帐家因为显著允许使用
Kerberos,除非动用程序池正在网络服务上下文中运行。这是因根据 Kerberos
的身份验证的劳作措施欲 SPN。在 WSS 和 MOSS 中,Web
应用程序实际上是分配给应用程序池之 IIS
网站,在放或用户帐户上下文中运作。可以吧同一应用程序池分配多个网站,但迅即并无是超级做法。除非您进行改动,否则
IIS 会将网络服务帐户用于应用程序池,而无下唯一域帐户。但是,若一旦于
SharePoint 中采取 Kerberos,必须对应用程序池帐户设置唯一 SPN。

在实践中,基于 Kerberos 的通信必须有一个客户端、一个能支持 Kerberos
的服务器和担任中间授权方的 KDC,此外还得
SPN。技术细节稍微有若干复杂。例如,Kerberos 还要求 DNS 与 Active Directory
或含有 SRV 记录、TCP/IP 和时空服务的 BIND 集成。如果您使用的凡拼了 DNS
的 Windows Server 2003 或
2008,则您已经怀有了必备组件,只需要安排这些零部件即可。图 3 显示了
SharePoint 中冲 Kerberos 的身份验证所涉嫌的顺序零部件和数据流。

图片 3.png)
图 3 Kerberos 身份验证

  1. 同 NTLM 相同,客户端浏览器采用主机名(FQDN 或别名)以匿名方式发生
    HTTP GET 请求。
  2. 前者服务器响应,返回 401.2 错误与 WWW-Authenticate: Negotiate
    头和/或 WWW-Authenticate: Kerberos 头(表明其支持 Kerberos
    身份验证)。您要于保管基本遭遇显式配置前端服务器上之是设置,相关内容将以下文讨论。
  3. 客户端与域控制器上的 KDC
    联系,并根据浏览器客户端以主机名的花样发送的音为 SPN 请求单。
  4. 假如 KDC 找到匹配的 SPN,它以对准票证进行加密并拿其回到。
  5. 浏览器客户端创建身份验证器,并以该与劳动票证一同发送到 IIS
    服务器。随后,IIS
    服务器对票证进行解密,确定身份,并检查该对所请资源的权能(访问控制列表),确定是不是允许看。
  6. 一旦允许看,IIS 将经 Web 应用程序服务挂钩 SQL Server,该服务将起
    KDC 请求 SQL Server 票证。
  7. 如若找到 SPN,KDC 将回来票,Web
    应用程序使用该票来询问内容数据库,并由此委派模拟用户。
  8. SQL Server 检查来 Web
    应用程序的字,并证实该字。验证成功后,SQL Server
    将数据发送回服务器,.NET 将能够编译 aspx 页,并拿那个发送至浏览器。
了解 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/<NetBIOSname>
HOST/<FQDN>。由于网络服务帐户作为网络直达之如出一辙宝计算机,因此 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.png)

图 4 基本 MOSS 场的 SPN

于设置 SPN 时,应该牢记有注意事项。首先,SPN 要登记到启用 SharePoint
的网站,正使要报到其它 IIS
网站那样。重要之是点名正确的主机名与帐户,每个网站的应用程序池在该帐户下运行。如果利用多只主机头,请保管为所有主机头设置
SPN。第二,不待指定 HTTP 和 HTTPS
端口,但应有指定其他自定义端口。第三,您或许还用配置外部分赖关系,例如配置针对
IIS 的注册表更改为支持带有自定义端口的 SPN 格式,以及部署更新为支持
SSP。您可以于布局 Kerberos 身份验证 (Office SharePoint
Server)
中找到更多详细信息。

假设想给 Kerberos
在环境遭受正常工作,您还该就另外两独第一步骤。您必须安排用于委派的处理器帐户和一部分劳务帐户,还得在管制核心也
Kerberos 配置场。Kerberos
中的委任的原理是:如果用户为最终资源发出请求,则有的中介帐户必须处理该要,这些中介帐户是不过信任的,能够代表用户进行委派。可以将
Active Directory
用户与电脑作为地域管理员,从而来布局用于委派的帐户。在用户还是微机帐户的“委派”选项卡下,选择“信任是用户/计算机来委派任何劳动(Kerberos)”。您当也前端、应用程序和
SQL Server 计算机帐户启用委派,还承诺为应用程序池(SSPAdmin、MySite、各种
Web 应用程序)和街劳动帐户启用委派。

另外,您还需要在“组件服务”中装置权限。在默认属性下,将“模拟级别”设置为“委派”。在“IIS
WAMREG Admin
Service”下,定位到“安全”选项卡,为应用程序池帐户授予“本地激活”权限。有关详细信息,请参考知识库文章
917409 和
920783。

启用委派后,即可通过启用 Kerberos 作为 SSP 和 Web
应用程序的首选协议来形成具体的布局工作。对于新安装,可以以 SharePoint
产品与技术配置为导中为治本基本网站开展这操作。否则,请在治本中心的“应用程序管理”下一定到“验证提供次”,单击“默认值”并拿艺术设置也“协商(Kerberos)”。不要忘记运行
iisreset /noforce,将改变应用为应用程序池,并也 SSP 启用
Kerberos

IIS 7 和 Windows Server 2008 中之扭转

截止目前,我们讨论的内容重点限于 Windows Server 2003 和 IIS 6 上之
SharePoint 2007。如果你迁移至 Windows Server 2008 和 IIS
7,则在网布局及生一部分变更,可能用外一些配备步骤。IIS 7
中之无比明白变化也许是她支持基础模式 Kerberos
身份验证。在本模式身份验证中,网络服务帐户(实际上即便是上文所陈述之处理器帐户)将对准票证进行解密,除非你指定了别样设置。当你迁移到
IIS 7
或设置一个新场时,默认情况下用启用内核模式身份验证。正使达到文所述,网络服务帐户是本土帐户。如果运行的凡单科服务器,则解密可以健康开展。但在庙被,解密会失败,因为若需用好经
KDC
验证的域帐户。这同样变型还意味着你可以使网络服务帐户进行商议转换(允许客户端向
IIS 进行非 Kerberos 身份验证,允许 IIS 将 Kerberos
用于后端通信),因为拖欠帐户已有所 LocalSystem 权限。

如要在运行 IIS 7 的 SharePoint 场中配备 Kerberos,需要手动更改
%WinDir%\System32\inetsrv\config\ApplicationHost.config 文件 —
当前从不 GUI 选项。相关条文如下所示。

<system.webServer> <security> <authentication> <windowsAuthentication enabled="true" useKernelMode="true" useAppPoolCredentials="true" /> </authentication> </security> </system.webServer>

绝不遗忘运行 iisreset /noforce
以动更改,并检讨最新更新以发现题目,例如当知识库文章
962943 中详细说明的蓝屏更新。

假如您的布置使用了位置模拟(web.config 中之 <identity
impersonate=”true”
/>)和购并模式管道,则还应小心另外一个布置细节。在这个景下,需要以
validateIntegratedModeConfiguration 设置为 false,或于藏模式管道遭运行
.aspx 页。

结论

虽然 Kerberos 身份验证需要部分分外安排步骤,还欲 NTLM
之外的再次多学问,但当下之自由化是通向 Kerberos 迁移。Microsoft 在 II7 中将
Kerberos 作为默认选中精选,并且为 Kerberos
提供了漂亮的支撑,因为其是一个开之规范。使用 Kerberos
物有所值。现在来大气文档介绍 Kerberos
的布、验证和故障排除,这吗也我们其实使用 Kerberos
提供了支撑。您无需进行多变更即可避免由于过多位认证跃点而造成的属性降低问题,享受
Kerberos 的精粹安全性。

相关文章