我有一个旧应用程序,我们使用基于委托的 kerberos 进行设置。该应用程序的所有功能都运行良好,直到我们在一台新的 Windows 10 机器上进行了试用。
过了一会儿,我们终于发现 Credential Guard 不能很好地处理这个旧应用程序。
Kerberos 注意事项
当你启用 Windows Defender Credential Guard 时,你不能再使用 Kerberos 无约束委派或 DES 加密。无约束委派可能允许攻击者从隔离的 LSA 进程中提取 Kerberos 密钥。请改用受限或基于资源的 Kerberos 委派。
我们必须切换我们的实现以使用基于约束的 Kerberos。我对如何做到这一点有点茫然。
我们当前的 SPN 是针对 Web 应用程序名称设置的 - (来自此链接的场景 2 - https://support.microsoft.com/en-ca/help/929650/how-to-use-spns-when-you-configure-托管的网络应用程序)
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.abdomain.com (这是我正在尝试的)
所以所有的 -q 命令现在都可以工作了。但问题依然存在
更新 3 -
这是委托选项卡的新图片,我在执行 IISReset 后使用“仅使用 Kerberos”和“使用任何身份验证协议”进行了尝试,但遇到了同样的问题。(当我按下“添加”按钮时,我添加了网络服务器。在图片中,带有 webServername 的条目的红色框和带有 spn 设置的条目的橙色框(在 HTTP - 服务类型旁边)