【问题标题】:Asp site works with Win7 IE 11 but not with Win10 IE11Asp 站点适用于 Win7 IE 11 但不适用于 Win10 IE11
【发布时间】:2017-09-27 19:27:51
【问题描述】:

所以我们有了这个旧的 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都是同一个gpo设置(不通过wmi过滤)。

所以该网站可以在 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 服务器的更多信息。

  • 服务器有 2 个从 URL 指向服务器的 spn
  • 服务器已设置为委托。
  • 应用程序池在特定域帐户上运行。它设置为 32 位。
  • Windows 身份验证是唯一启用的身份验证。 (扩展保护已关闭,启用内核模式身份验证已启用)。 Negociate 是第一个启用的提供程序。 Ntlm 是第二个。

更新 3: 我让微软参与了我的一个 msdn 事件。 当我们进行网络监控跟踪时,kerberos 似乎存在问题。

工作 - 使用 windows10 开发 票证:Realm:ourRealm,Sname:ldap/DomainControllerFQN

工作 - 使用 windows7 进行生产 票证:Realm:ourRealm,Sname:ldap/DomainControllerFQN

不工作 - 使用 windows10 进行生产 Ticket:领域:ourRealm,Sname:运行网站的帐户名称。 所有请求都属于 NLMP ( ntlm) 而不是使用 kerberos

至于 spn,它们在两个环境之间是相同的。当我们执行 setspn -l Webserver 时,这是它们的一个子集。

  • http/WebsiteFQN -- 我们在 3 年前部署到 win2k12 时添加了这个
  • http/websiteName -- 我们在 3 年前部署到 win2k12 时添加了这个
  • TERMSRV/服务器名称
  • TERMSRV/WebserverFqn
  • WSMAN/WebServerFqn
  • WSMAN/WebServer
  • RestrictedKrbHost/WebServer
  • 主机/网络服务器
  • RestrictedKrbHost/WebServerFqn
  • 主机/WebServerFqn

在网络服务器的委托选项卡上,它设置为

"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 - 产品 - 不工作

#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 - 生产型

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 -

所以为了运行,我创建了一个快速的 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);
}

它似乎工作正常,并为我提供了我想要的 maxlength 值。所以我想我会在这个问题上认输,并继续重写应用程序的 c#。

更新 - 6(6 个月后)。

事实证明,问题出在凭据保护上。 (另一个旧应用程序开始出现相同类型的问题)

我们在注册表中关闭了凭据保护,应用程序运行良好。

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

(来自链接)

Kerberos 注意事项

启用 Windows Defender Credential Guard 后,您无法再 使用 Kerberos 无约束委派或 DES 加密。不受约束 委托可能允许攻击者从 孤立的 LSA 进程。使用受限或基于资源的 Kerberos 而是委托

所以我必须研究一下我猜是受限或基于资源的 Kerberos

【问题讨论】:

  • "服务器有 2 个从 URL 指向服务器的 spn。" 那么这两个 SPN 是什么?将其添加到您的问题中,并添加一个屏幕截图,显示您是如何委派的。
  • 您好 T-Heron,我已为您添加了更多详细信息。一旦我从 Microsoft 获得更多信息,我将更新该主题。
  • 我可能不需要等待微软,如果您可以为网络服务器添加委派选项卡的屏幕截图,显示该选项卡底部的“扩展”复选框已标记。那会很有帮助。
  • 我已经添加了截图。当我选中展开的复选框时,屏幕截图中没有任何变化。这对于 dev 和 prod 都是一样的。
  • 不,我已经从 keberos 高级人员调到了微软的 iis/asp.net 人员。一旦我有答案,我一定会更新

标签: asp.net windows active-directory kerberos gpo


【解决方案1】:

所以凭证保护似乎是罪魁祸首。我已经提出了另一个问题来尝试指出该问题 - Switching application to use Constraint based kerberos

【讨论】:

    猜你喜欢
    • 2014-07-07
    • 2019-10-26
    • 2016-07-27
    • 1970-01-01
    • 2015-05-14
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    相关资源
    最近更新 更多