我有一个旧的应用程序,我们使用基于委派的kerberos设置。应用程序的一切工作正常,直到我们在我们的一台新Windows 10计算机上试用它。
过了一会儿,我们终于发现Credential后卫对这个旧应用程序并不好看。
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命令现在都可以工作。但问题仍然存在
更新3 -
这是代理选项卡的新图片 我用&#34;仅使用Kerberos&#34;和&#34;使用任何身份验证协议&#34;在执行IISReset之后,我遇到了同样的问题。 (当我按下&#34;添加&#34;按钮时,我添加了网络服务器。 在图片里, 带有webServername的条目的红色框 具有spn设置的条目的橙色框(在HTTP - 服务类型旁边)
答案 0 :(得分:1)
好的,所以我能够获得上面的测试页,终于可以工作了。 T-Heron的评论很明确,我只是添加了错误的服务来委托。
一旦我从域控制器中添加了ldap服务,那么测试页就会开始工作。
(我们的域控制器有2个ldap服务。一个带有guid,另一个带有域名。我选择了一个域。)
[]
更新1-解决方案的测试最初是在win2k8上完成的。在win2k12上执行相同操作无效。
最终我不得不将应用程序池更改为内置的ApplicationPoolId(或本地系统),以使其正常工作。