切换应用程序以使用基于约束的kerberos

时间:2018-05-25 18:37:35

标签: powershell asp-classic kerberos kerberos-delegation

我有一个旧的应用程序,我们使用基于委派的kerberos设置。应用程序的一切工作正常,直到我们在我们的一台新Windows 10计算机上试用它。

过了一会儿,我们终于发现Credential后卫对这个旧应用程序并不好看。

根据https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-considerations

  

Kerberos注意事项

     

启用Windows Defender Credential Guard后,您将无法再使用   使用Kerberos无约束委派或DES加密。无约束   委托可以允许攻击者从中提取Kerberos密钥   孤立的LSA过程。使用受约束或基于资源的Kerberos   代替代表团。

我们必须将我们的实现切换为使用基于约束的Kerberos。我对如何做到这一点感到有点失落。

我们当前的SPN是根据Web应用程序名称设置的 - (此链接中的方案2 - https://support.microsoft.com/en-ca/help/929650/how-to-use-spns-when-you-configure-web-applications-that-are-hosted-on

setspn -a http/WebSiteName webServerName
setspn -a http/WebSiteName.domain.com webServerName

该应用程序仅与Active Directory通信。不涉及数据库。该站点当前正在运行具有域帐户的应用程序池。

当我尝试像

这样的命令时
$comp = Get-ADComputer DcOrAnotherComputer
Set-AdComputer -identity webServerName -PrincipalsAllowedToDelegateToAccount $comp

我收到以下powershell错误。

Set-AdComputer : The attribute cannot be modified because it is owned by the system
At line:2 char:1
+ Set-AdComputer -identity hql-dmeds01 -PrincipalsAllowedToDelegateToAccount $comp
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (hql-dmeds01:ADComputer) [Set-ADComputer], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:8369,Microsoft.ActiveDirectory.Management.Commands.SetADComputer

我已经将应用程序归结为一个适用于Win7 / win2012的示例,而不是带有凭据保护的win10。

<%@ Language=VBScript %>
<%


' Create the connection the AD
    set con = createobject("ADODB.connection")
    set Com = createobject("ADODB.command")
    con.Provider = "ADsDSOObject"
    con.Open "Active Directory Provider"
    Set Com.ActiveConnection = con

    dim ldapCall 
    ldapCall = "SELECT ADsPath, distinguishedname, displayName"   &_ 
                   "  FROM '" & "LDAP://DC=mydomain,DC=com'  " &_
                      " WHERE objectClass = 'group' AND name = 'SomeTestGroupName'" & _
                     " ORDER BY displayName "
    'response.write ldapCall

' Execute the search call
    Com.CommandText = ldapCall
    Set rs = Com.Execute

    if not(rs.EOF) then
        response.write "SomethingHappended<br />"
    else 
        response.write "Why don't you work???"
    end if

%>

更新1 - 回答T-Heron的问题 这是做的结果

setspn -q http/WebSiteName.domain.com  - 
Checking domain DC=Mydomain
no such SPN found.

如果我这样做

setspan -q http/WebSiteName- I get the following

Checking domain DC=Mydomain
CN=Webserver,OU=OuLocation,DC=MyDomain
        http/WebSite.myDomain
        http/WebSite
        CmRcService/Webserver
        CmRcService/Webserver.myDomain
        WSMAN/Webserver.myDomain
        TERMSRV/Webserver.myDomain
        RestrictedKrbHost/Webserver.myDomain
        HOST/Webserver
        WSMAN/WSMAN/Webserver
        TERMSRV/WSMAN/Webserver
        RestrictedKrbHost/WSMAN/Webserver
        HOST/Webserver

更新2- 更新1中的-q没有工作的原因是spn已设置 至 HTTP / WebsiteName.domain.com 而不是http / WebsiteName.a.b.domain.com(这是我正在尝试的)

所以所有-q命令现在都可以工作。但问题仍然存在

这是“委派”标签的屏幕截图。 enter image description here

更新3 -

这是代理选项卡的新图片 我用&#34;仅使用Kerberos&#34;和&#34;使用任何身份验证协议&#34;在执行IISReset之后,我遇到了同样的问题。 (当我按下&#34;添加&#34;按钮时,我添加了网络服务器。 在图片里, 带有webServername的条目的红色框 具有spn设置的条目的橙色框(在HTTP - 服务类型旁边)

enter image description here

1 个答案:

答案 0 :(得分:1)

好的,所以我能够获得上面的测试页,终于可以工作了。 T-Heron的评论很明确,我只是添加了错误的服务来委托。

一旦我从域控制器中添加了ldap服务,那么测试页就会开始工作。
(我们的域控制器有2个ldap服务。一个带有guid,另一个带有域名。我选择了一个域。)

[Screenshot of the delegation tab for the webserver]

更新1-解决方案的测试最初是在win2k8上完成的。在win2k12上执行相同操作无效。

最终我不得不将应用程序池更改为内置的ApplicationPoolId(或本地系统),以使其正常工作。