Asp站点适用于Win7 IE 11但不适用于Win10 IE11

时间:2017-09-27 19:27:52

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

所以我们有这个旧的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服务器的更多信息。

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

更新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时,这是它们的一个子集。

  • http / WebsiteFQN - 我们在3年前部署到win2k12时添加了这个
  • http / websiteName - 我们在3年前部署到win2k12时添加了这个
  • TERMSRV /服务器名
  • TERMSRV / WebserverFqn
  • WSMAN / WebServerFqn
  • WSMAN / Web服务器
  • RestrictedKrbHost / Web服务器
  • HOST / Web服务器
  • RestrictedKrbHost / WebServerFqn
  • HOST / WebServerFqn

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

"Trust this computer for delegation to any service (Kerberos only)"

Delegation Tab for the webserver

以下是“IIS身份验证”部分的屏幕截图

IIS Authentication Screen

IIS Advance Settings

IIS Auth Provider section

- 更新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个月后)。

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

我们在注册表中关闭了凭证保护,应用程序运行正常。

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

1 个答案:

答案 0 :(得分:0)

因此,凭证守卫似乎是罪魁祸首。我提出了另一个问题,试图指出这个问题-Switching application to use Constraint based kerberos