SPN 和 Kerberos 委派

SPN 和 Kerberos 委派

我想检查一下我的理解。下面是一个完全假设的场景,因为我目前正在学习认证。

我有一个 IIS 应用程序池,其中包含一个基本网站,该网站从 SQL 后端访问数据。我想设置 Kerberos 身份验证,因此需要委派。

运行该站点的 AppPool 的身份是 ,IISApp01并且将 SPN 设置为HTTP/IISSRV01.serverfault.local

现在,一切都很好,但是在 Active Directory 中的哪里可以设置委派选项,是在托管 IIS 应用程序池的计算机对象上,还是在IISApp01作为 AppPool 标识的用户帐户上。谁会实际将凭据委派给我的 SQL Box?那么 - 我该如何将服务添加到允许委派的受限服务列表中?

谢谢!

答案1

简短版本:您在 AD 用户和计算机中该主体的“委派”选项卡上为刚刚配置了 SPN 的安全主体(即用户或计算机)设置委派选项。

较长版本:不,不,不!

您不想设置 Kerberos 身份验证因此委派。这些是单独的概念,彼此独立。

您可以使用 Kerberos 进行身份验证,而无需委派任何内容。事实上,Windows 2008 的 IIS 7 及更高版本出厂时附带默认配置,这意味着任何使用其真实主机名的单个域成员框都将能够执行 Kerb 身份验证。请参阅“内核模式身份验证”,剧透!您需要关闭它才能让您的场景按您描述的方式工作*。

Kerb 委派要求使用一个主体来终止一个 Kerberos 认证跳跃,然后代表原始请求安全主体(用户)执行另一个跳跃。

回到解决方案:

因此对于 PC -> IIS -> SQL,您需要规划出每个进程的运行情况:

PC(用户)-> IIS(应用程序池帐户(IISApp01))-> SQL(服务帐户(“SQLService”))

在这种情况下,每个帐户都必须是域用户帐户,为简单起见,您需要在相关网站的 Windows 集成身份验证选项中禁用内核模式身份验证。

然后,您需要识别每次跳跃使用的 SPN,并确保它已在每个跳跃中注册:

PC(用户)并不重要

IIS 层:SETSPN -S IISApp01 http/name.used.by.client(这不是自动的)

SQL 层:SETSPN -S SQLService mssql/name.used.by.iis.app:1433(这可能是自动的)

然后,您应该有一个适用于 IISApp01 的“委派”选项卡,您可以在其中指定 IISApp01 被信任以进行约束委派(搜索、选择 SqlService,然后选择针对 SqlService 注册的适当 SPN)。

有一个名为 DelegConfig 的网站/程序可以帮助您绘制这些内容。

*并非完全正确;有很多解决方案。

相关内容