所以我们有这个旧的asp网站(不会死)。
目前它位于win2k12上,它是用spn和kerberos授权设置的。它使用一个运行.vbs的Com +对象,与活动目录进行大量交谈。
我们开始推出Windows 10实施。
在我们的开发环境中,它适用于win7 / IE11和win10 / IE11 在我们的生产环境中,win7 / IE11已经工作(现在仍然有效),但win10 / IE11无效。
部分错误消息是
Active Directory错误'80040e37'
指定的目录服务属性或值不存在。
获取属性最大范围的错误
属性:[givenName]
错误说明:[ - 2147463153]尝试的操作违反了DS架构规则。
通常这些会指向网站配置不正确,但它对win7上的每个人都很好。
因此,这将指向win10实现。
Windows 10中会出现什么问题? (也许是一个特定的错误配置的gpo?)我很难过。
更新1 - 。
GPO似乎没有问题。无论是win7还是win10(没有被wmi过滤),它都是相同的gpo集。
因此该网站适用于Windows8 / ie11,它也可以在win7上运行Chrome(经过一些调整以启用kerberos)
我设法创建了一个导致问题的小测试页面。
Dim oSysInfo
dim user
'on error resume next
'Get the Current Users information. This information is just the currently logged on user
' Set oSysInfo = Server.CreateObject("ADSystemInfo")
'Get Current User Object
sURL= "LDAP://AUsersDistinguishedName"
response.write(sURL & "<br />")
on error resume next
Set user = GetObject(sURL)
pAttribute = "givenName"
'response.write(user.get(pAttribute))
Dim cl, sc, pr, pr2, pAttribute
Set cl = GetObject(user.Schema)
'Test(user)
Set sc = GetObject(cl.Parent)
Set pr = sc.GetObject("Property", pAttribute)
response.write(pr.MaxRange)
Set cl = Nothing
Set sc = Nothing
Set pr = Nothing
'-2147463155: Not found in directory cache, that means the MaxRange property is empty or not set, so there is no error
if err.number <> 0 and err.number <> -2147463155 then
Response.Write "<br>Error description: [" & err.number & "] " & err.Description
End If
---更新2。
我将添加有关IIS服务器的更多信息。
更新3: 我让微软参与了我的一个msdn事件。 当我们进行网络监控跟踪时,kerberos似乎存在问题。
工作 - 使用windows10开发 票证:Realm:myRealm,Sname:ldap / DomainControllerFQN
工作 - 使用windows7进行操作 票证:Realm:myRealm,Sname:ldap / DomainControllerFQN
不工作 - 使用windows10生成 票证:领域:myRealm,Sname:运行网站的帐户名称。 所有请求都属于NLMP(ntlm)而不是使用kerberos
对于spn,它们在两种环境之间都是相同的。当我们做setpn -l Webserver时,这是它们的一个子集。
在网络服务器的委托选项卡上,它设置为
"Trust this computer for delegation to any service (Kerberos only)"
以下是“IIS身份验证”部分的屏幕截图
- 更新4
这是在两个环境中点击网站后的Klist信息的输出(我在工作站上进行了klist清除)
Windows 10 - 开发 - 工作
Cached Tickets: (4)
#0> Client: MyUser @ DomainFqn
Server: krbtgt/DomainFqn @ DomainFqn
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x60a00000 -> forwardable forwarded renewable pre_authent
Start Time: 11/28/2017 10:27:10 (local)
End Time: 11/28/2017 20:27:10 (local)
Renew Time: 12/5/2017 10:27:10 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0x2 -> DELEGATION
Kdc Called: DomainControllerFqn
#1> Client: MyUser @ DomainFqn
Server: krbtgt/DomainFqn @ DomainFqn
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40e00000 -> forwardable renewable initial pre_authent
Start Time: 11/28/2017 10:27:10 (local)
End Time: 11/28/2017 20:27:10 (local)
Renew Time: 12/5/2017 10:27:10 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0x1 -> PRIMARY
Kdc Called: DomainControllerFqn
#2> Client: MyUser @ DomainFqn
Server: cifs/resourceServer @ DomainFqn
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40a00000 -> forwardable renewable pre_authent
Start Time: 11/28/2017 10:27:11 (local)
End Time: 11/28/2017 20:27:10 (local)
Renew Time: 12/5/2017 10:27:10 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0
Kdc Called: DomainControllerFqn
#3> Client: admlareaua @ DomainFqn
Server: HTTP/webserverFQN @ DomainFqn
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40a40000 -> forwardable renewable pre_authent ok_as_delegate
Start Time: 11/28/2017 10:27:10 (local)
End Time: 11/28/2017 20:27:10 (local)
Renew Time: 12/5/2017 10:27:10 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0
Kdc Called: DomainControllerFqn
Windows 10 - Prod-不工作
#0> Client: MyUser @ DomainFqn
Server: krbtgt/DomainFqn @ DomainFqn
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40e00000 -> forwardable renewable initial pre_authent
Start Time: 11/28/2017 9:14:10 (local)
End Time: 11/28/2017 19:14:10 (local)
Renew Time: 12/5/2017 9:14:10 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0x1 -> PRIMARY
Kdc Called: DomainControllerFqn
#1> Client: admhqlareaua @ DomainFqn
Server: HTTP/WebServerFQN @ DomainFqn
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40a40000 -> forwardable renewable pre_authent ok_as_delegate
Start Time: 11/28/2017 9:14:10 (local)
End Time: 11/28/2017 19:14:10 (local)
Renew Time: 12/5/2017 9:14:10 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0
Kdc Called: DomainControllerFqn
Windows 7 - Prod- Working
Cached Tickets: (3)
#0> Client: MyUser @ DomainFqn
Server: krbtgt/DomainFqn @ DomainFqn
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x60a00000 -> forwardable forwarded renewable pre_authent
Start Time: 11/28/2017 9:17:24 (local)
End Time: 11/28/2017 19:17:24 (local)
Renew Time: 12/5/2017 9:17:24 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
#1> Client: MyUser @ DomainFqn
Server: krbtgt/DomainFqn @ DomainFqn
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40e00000 -> forwardable renewable initial pre_authent
Start Time: 11/28/2017 9:17:24 (local)
End Time: 11/28/2017 19:17:24 (local)
Renew Time: 12/5/2017 9:17:24 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
#2> Client: MyUser @ DomainFqn
Server: HTTP/WebServerFQN @ DomainFqn
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40a40000 -> forwardable renewable pre_authent ok_as_delegate
Start Time: 11/28/2017 9:17:24 (local)
End Time: 11/28/2017 19:17:24 (local)
Renew Time: 12/5/2017 9:17:24 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
更新5 -
因此,对于run,我创建了一个快速的mvc站点并将其作为子站点放到非工作站点。
我制作了以下控制器。
public JsonResult GetList2()
{
var st = new List<string>();
var currSchema = ActiveDirectorySchema.GetCurrentSchema();
st.Add(currSchema.Name);
foreach (ActiveDirectorySchemaProperty property in currSchema.FindAllProperties())
{
st.Add($"{property.Name} - {property.RangeUpper}");
}
return Json(st, JsonRequestBehavior.AllowGet);
}
它似乎工作正常,并给我我想要的最大长度值。所以我想我会在这个问题上撒谎并继续重写到应用程序的c#。
更新 - 6(6个月后)。
事实证明,问题在于凭证保护。 (另一个旧的应用程序开始出现相同类型的问题)
我们在注册表中关闭了凭证保护,应用程序运行正常。
(来自链接)
Kerberos注意事项
启用Windows Defender Credential Guard后,您将无法再使用 使用Kerberos无约束委派或DES加密。无约束 委托可以允许攻击者从中提取Kerberos密钥 孤立的LSA过程。使用受约束或基于资源的Kerberos 代替
所以我将不得不考虑一下我猜的约束或基于资源的Kerberos
答案 0 :(得分:0)
因此,凭证守卫似乎是罪魁祸首。我提出了另一个问题,试图指出这个问题-Switching application to use Constraint based kerberos