windows的域和域林间的信任是如何工作的

文章目录

  • 注解
  • 信任关系架构
    • NTLM协议 (Msv1_0.dll)
    • Kerberos协议 (Kerberos.dll)
    • Net Logon (Netlogon.dll)
    • LSA (Lsasrv.dll)
    • Tools
    • 活动目录
    • TDO 受信任域对象
    • 受信任域对象内容
    • TDO 密码
  • 信任关系的实际限制
    • TDO数量
    • 信任关系路径
    • 信任关系搜索
  • 信任关系流
    • 单向信任关系、双向信任关系
    • 传递性信任关系和非传递性信任关系
  • 信任类型
    • 自动创建的信任关系
      • 父子域信任关系
      • Tree-root信任关系
    • 手动设置的信任关系
      • 快捷信任关系
      • 外部信任关系
      • 领域信任关系
      • 林信任关系
  • 信任关系的处理和交互
    • 认证引用概述
      • Kerberos V5引用过程
      • NTLM引用处理过程
      • 其他的认证协议引用处理过程
    • 基于Kerberos的跨域(同林)认请求处理
    • 基于Kerberos的跨域林认证请求处理
  • 在信任关系中使用到的网络端口
    • Local Security Authority RPC端口
    • Net Logon RPC端口
    • 信任关系中会用到的端口

原文链接

英语水平有限,如有错误或者不恰当的地方,欢迎指正

注解

  • NT 4.0内核用于XP之前的windows机器,是很古老的操作系统版本,5和6依次对标xp和win7
  • 文中的NT指的是NT 4.0

活动目录通过域和域林间的信任关系为不同的域个域林的通信提供安全保障。在通过信任关系进行认证之前,Windows必须首先确定接受请求的域是否和发起请求的账户所在的域之间拥有信任关系。要想进行这个判断,Windows安全系统需要在请求和被请求的域的域控制器中计算出一个信任路径

活动目录所提供的的访问控制机制和Windows分布式安全模型共同为域和域林信任的操作构建了一个最佳的环境。为了让这些信任可以正常工作,域中的每一个工作站和服务器都必须拥有一个直接到达域控制器的信任路径。信任路径Net Logon服务通过一个已经认证过的连接到域控制器的远程过程调用(RPC)来实现的。另外,一个安全的隧道会通过内部域信任关系拓展到其他的活动目录域 。这个所谓的安全隧道是用来获取和验证安全相关信息,包括用户和组的SID

这一章节会描述信任机制的内部工作原理,讨论将会被使用到的不同的信任关系,并提供一个详细的引用列表、涉及到信任的登录过程,还会列出所有的信任机制会用到的网络端口。

信任关系架构

集成在Windows Server 2003和活动目录的应用使用操作系统的组件来建立和维护信任。大量的组件帮助信任架构为活动目录提供一个高效的通信设施。这些组件包括认证协议,Net Logon服务,LSA和存储在活动目录中的信任域对象(TDO–>Trusted Domain Objects)。下面这张图中展示了这些信任关系组件:

windows的域和域林间的信任是如何工作的_第1张图片

NTLM协议 (Msv1_0.dll)

NTLM认证协议依赖于域控制器上的Net Logon服务来进行用户身份认证和认证信息的获取。这个协议专门用于为不使用Kerberos进行认证的用户提供认证服务。NTLM使用信任来在不同的域之间传递认证请求。

Kerberos协议 (Kerberos.dll)

Kerberos V5认证协议依也赖于域控制器上的Net Logon服务进行用户的认证和认证信息的获取。Kerberos协议连接KDC(Key Distribution Center)和活动目录账户存储来获取session tickets。Kerberos协议也使用信任来使用cross-realm(跨领域(kerberos相关术语))ticket-granting 服务(TGS)并通过安全隧道验证Privilege Attribute Certificates(PACs)。Kerberos协议只在非Windows操作系统的Kerberos领域中进行cross-realm认证,并且这种认证不需要于Net Logon服务进行交互

Net Logon (Netlogon.dll)

Net Logon服务为计算机和域控制器之间维护一个安全隧道。它也被用在下面这些信任相关的处理过程:

  • 信任的构建和管理
    • Net Logon帮助维护信任密码,收集信任关系信息并通过LSA进程和TDO验证信任关系。对于林信任,信任关系信息包含了林信任关系信息(FTinfo)记录,这个记录包含着一个受信任的域林声明要进行管理的命名空间(暂时不太理解这个命名空间指的是啥)的集合,该记录中有一个字段用于表明每一个声明要管理的命名空间是否是被信任的(这里的这个命名空间指的可能是
  • 认证
    • 通过安全隧道将用户凭证提交给域控制器,并向该用户返回域SID和用户特权
  • 定位域控制器
    • 在当期域定位域控制器或者跨域定位域控制器
  • 验证
    • 其他域中的用户凭证是Net Logon处理的。当一个信任域需要确认一个用户的身份时,该用户的凭证会通过Net Logon服务发送给受信任域进行认证。
  • PAC确认
    • 当一个服务器使用Kerberos协议进行认证时,需要确认service ticket中的PAC,Net Logon服务会通过安全隧道将PAC发送给域控制器进行确认
    • 关于PAC在windows的kerberos版本中的作用https://blogs.technet.microsoft.com/apgceps/2011/09/12/packerberos-2/ https://blogs.technet.microsoft.com/apgceps/2011/09/19/packerberos/

LSA (Lsasrv.dll)

LSA是一个受保护的子系统,它维护所有本地安全相关的信息,并提供各种用于转换names和identifiers对应关系的服务,LSA的用户模式和内核模式均提供对象验证。用户特权检查和审计信息生成的服务。LSA负责检查所有由受信任域和非受信任域的服务提供的session tickets的有效性

Tools

管理员可以使用活动目录域和信任关系,Netdom和Nltest来查看、创建、移除、更改信任关系。活动目录域和信任关系指的是Microsoft Management Console (MMC),MMC是用于管理域信任、域和域林功能级别以及用户主体名后缀的。Netdom和Nltest命令行工具用于查找、显示、创建和管理信任关系。这些工具直接与域控制器上的LSA认证机构进行通信

活动目录

活动目录服务存储网络上的对象的信息并提供给网络上的用户和管理员进行使用。信任关系可以被用来拓展到其他的活动目录域和域林

TDO 受信任域对象

一个组织中的每一个互相信任的域和域林都会被一个存储在其对应的域中的TDO代表

受信任域对象内容

包含在TDO中的内容会根据该TDO是被域信任关系创建的还是域林信任关系创建的而变化。当一个域信任关系被创建时,一些属性诸如DNS域名、域SID、信任关系类型、信任关系传递性和windows对等域名都会保存在TDO中。林信任关系TDO存储额外的属性来认证其他林中的信任命名空间。这些属性包括域树名、用户主体名称(UPN)后缀、服务主体名称(SPN)后缀以及安全ID(SID)命名空间。

因为信任关系被活动目录以TDO的形式存储起来,所有windows server 2003域林中的域都拥有该域林内信任关系相关的信息,与NT4.0域之间的信任关系不会以TDO的形式被存储在活动目录中

TDO 密码

一个信任关系中的两个域都会共享一个密码,该密码存储在TDO对象。最为该账号维护的一部分,每30天,信任域控制器会更改一次密码。因为所有的双向信任关系其实都是两个单向信任关系组成的,所以这个密码更改会发生两次。在一个信任关系中,有信任的一方,还有一个被信任方。在受信任方,所有的可写域控制器都会参与TDO account的维护,在信任方,PDC模拟器会进行密码额更改,要完成该过程,域控制器会执行以下处理:

  1. 信任方的主域控制器(PDC–>Promary Domain Controller)模拟器创建一个新密码
    受信任域的域控制器永远不会发起密码更改操作,它总是由信任域的PDC模拟器发起的
  2. 信任域的PDC模拟器将TDO中的OldPassword字段设置为当前的TDO的NewPassword字段的指**(现在这个newpassword将要变成旧密码了,所以需要将其值转移到OldPassword字段中)**
  3. 信任域的PDC模拟器将TDO对象的NewPassword字段值设置为新密码
    保存一份之前的密码的copy,以便于将来回滚到之前的状态,以防止受信任域没有收到改变密码的消息或者新的请求已经开始使用新的信任关系密码但是域控制器之间的replicated操作还未完成。
  4. 信任域的PDC模拟器向受信任域的域控制器发起了一个远程调用,请求设置新的密码
  5. 受信任域的控制器更改信任关系密码
  6. 信任域和受信任域中的所有控制器都会在一定的时间完成信任关系密码的更新操作。在信任域中,这个密码的更改会触发TDO的紧急复制

经过以上过程之后,双边信任关系密码就更改完成了。

信任关系的实际限制

信任关系的限制主要来源于TDO的数量、信任路径的长度以及客户端发现可用信任关系的能力

TDO数量

TDO是域关系密切,随着TDO数量的上升,这些TDO连接的处理性能就会降低。测试表明,当一个组织的TDO总量超过2400时,完成TDO相关的操作(比如跨域认证)所消耗的时间会显著上升。当然也只有少数比较大的组织才会拥有那么多的TDO,且在windows server 2003中没有对信任关系数量的绝对限制。

信任关系路径

在windows server 2003域中,kerberos最多可以通过10个信任关系链路来在其他域中查找到请求的资源的位置。如果不同域之间的信任路径超过了这个值,那么访问将会失败。可以通过建立到目标域的外部信任来解决信任关系路径过长的问题。

信任关系搜索

当一个客户端发起信任路径搜索时,搜索范围被限制在直接建立了信任关系的域以及和域林内具有传递性的域(就是说客户端所在域和这些域本来是没有建立信任关系的,但是和一个域建立了信任关系,但是这个域又和域林内的其他域有信任关系,这样信任关系就会传递到客户端所在的域)。比如,**一个子域不能使用其父域与其他域林中的域的外部信任关系。**这是因为一个完整的信任路径必须在客户端可以使用该信任路径查找到请求的资源所在的域之前建立完成(这是当然的)。windows server 2003不支持盲引用;如果一个客户端不能识别一个信任路径,那么它将不会尝试寻求对另一个域中资源的访问权。子域无法识别其域林外的信任机构的外部信任关系或者领域信任关系,因为用于代表这些信任关系的TDO保存在共享这些信任关系的域内,而不是全局编录服务器。

信任关系流

信任关系之间的安全通信流决定了信任关系的弹性(不太明白这个弹性表示啥意思?):创建或者配置信任关系的方式决定了域林内的通信或者跨域林的通信能拓展多远。信任关系之间的通信流取决于信任方向(单向还是双向)以及信任关系的传递性(传递性还是非传递性)

单向信任关系、双向信任关系

信任关系的建立旨在完成资源的单向或者双向访问。一个单向信任关系是一个由两个域创建的单向认证路径。在一个Domain A和Domain B之间的单向信任关系中,Domain A中的用户可以访问Domain B中的资源。然而,Domain B中的用户却不能访问Domain A中的资源。单向信任关系可以是传递的也可以是非传递的。

活动目录林中的所有域间信任关系都是双向的和传递的信任关系。当一个新的子域被创建,一个双向的、传递性的信任关系也就在父域和这个新的子域之间自动创建了。在一个双向信任关系中,Domain A信任Domain B,并且Domain B信任Domain A。这意味着经过认证的请求可以再这两个域之间进行双向的发送。双向信任关系也可以是传递性的或者非传递性的。一个活动目录域可以在以下等级的活动目录域中创建单向或者双向信任关系:

  • 位于同一个域林中的Windows Server 2003域
  • 位于不同域林中的Windows Server 2003域
  • Windows NT 4.0域
  • kerberos V5领域

传递性信任关系和非传递性信任关系

传递性却决于信任关系是否能够被拓展到创建该信任关系的两个域之外。一个传递性的信任关系可以被用来拓展信任关系到其他的域中;一个非传递性的信任关系可以被用来隔绝与其他域的信任关系。

你每一次在域林中创建一个新的域,一个双向且传递的信任关系就会在新域和其父域之间自动建立起来。如果这个新建的域中又创建了一个子域,那么信任路径流会向上拓展到新域和父域之间的信任关系。具有传递性的信任关系会顺着域树拓展到整颗域树中。

认证请求随着信任路径,因此来自域林中的任何域中的账户都可以在该域林中的其他域中进行认证。在经过单次登录过程之后,具有一定权限的用户可以访问域林中的所有域中的资源。下面的示意图展示了Tree 1和Tree 2中的所有域都具有默认的传递性的信任关系。其结果就是,当用户被分配适当的权限之后,Tree 1中的用户可以访问Tree 2中的域中的资源,且Tree 2中的用户可以访问Tree 1中的域中的资源。
windows的域和域林间的信任是如何工作的_第2张图片

从这张示意图中我们可以看到,同一域林中的域树根域之间也会自动拥有一个传递性的双向信任关系。

除了上述的默认信任类型之外,还有下面三种信任类型可以通过新建信任关系向导来进行创建。

  • 快捷信任关系
    • 一种建立于同一个域树(林)中的域之间的传递性信任关系,用于缩短大且复杂的域树(林)中的信任关系路径
  • 林信任
    • 两个林根域之间的信任关系
  • 领域信任
    • 活动目录域和Kerberos领域之间的信任关系

一个非传递性的信任关系被限制在这两个建立了信任关系的域之间。

非传递性信任关系默认是单向的,你可以通过创建两个单向的信任关系来达到双向信任的效果。

下面列出的域之间只能创建非传递性信任关系:

  • 一个Windows Server 2003域和一个Windows NT域
  • 一个Windows Server 2003域和另一个域林中的域(前提是这两个域林没有建立信任关系

通过新建信任关系向导,你可以创建如下的非传递性信任关系:

  • 外部信任(External Trust)
    • 一个创建于Windows Server 2003域和另一个林中的Windows NT、Windows 2000或者Windows Server 2003的域之间的信任关系。当你想要将一个NT域升级至Windows Server 2003域时,所有的之前存在的Windows NT信任关系可以被完整的保留。注意Windows Server 2003域和Windows NT域之间的信任关系是非传递性的。
  • 领域信任(Realm Trust)
    • 活动目录域和Kerberos V5领域之间的非传递性信任关系

信任类型

信任关系具有不同的特点。**创建信任关系得域的类型会影响到信任关系的类型。**比如,两个位于不同域林中的子域之间的信任关系总是外部信任关系,但是两个windows server 2003林根域之间的信任关系可能是外部信任关系,也可能是林信任关系。

有两种信任类型会在你是用活动目录安装向导自动创建。还有四中其他的信任类型由新建信任关系向导或者Netdom命令行工具进行创建。

自动创建的信任关系

默认情况下,当一个新域添加到域树中或者林根域(林根域其实就是域中的一颗域树的根域,就是林中的一个域树)中时会自动创建双向传递性信任关系。默认的信任关系有两种:父子域信任关系和tree-root(树根域)信任关系。

父子域信任关系

只要有新的域加入到域树中,那么父子信任关系就会创建起来。活动目录安装过程会自动创建信任关系。父子域信任关系有如下特点:

  • 只能存在于同一颗域树中
  • 父域总是被子域信任
  • 它一定是双向且传递的信任。可传递性信任关系的双向性使得活动目录中的全局编录信息可以复制到所有层级的的域中。

Tree-root信任关系

tree-root信任关系会在你将一个新的域树添加到域林中时创建。活动目录安装向导会自动创建一个关于你新创建的域树根域和林根域的信任关系。tree-root信任关系具有以下局限性:

  • 它只能在同一个域林中的两颗域树根域之间建立。
  • 它必须是双向且传递的。

手动设置的信任关系

在windows server 2003中共有4中信任关系需要进行手动设置:快捷信任关系(用于优化同一个域林中域树间的信任路径)、外部信任关系领域信任关系林信任。这些信任关系类型必须使用新建信任关系向导或者Netdom命令行工具来进行创建。

快捷信任关系

windows的域和域林间的信任是如何工作的_第3张图片

这个不再赘述,大致就是图中所示的意思。

外部信任关系

外部信任关系可以创建在不同域林中的活动目录域中,还可以创建在windows server 2003或更高版本的活动目录域和windows NT4.0或早期版本的活动目录域之间。外部信任关系具有以下特点:

  • 非传递的
  • 如果想要创建一个双向的信任关系,必须手动在每一端设置一个单向的信任关系。在windows server 2003中可以使用新建信任关系向导一次性创建出一个双向的外部信任关系。
  • windows server 2003域强制启用SID筛选器隔离。由信任域创建的外部信任关系使用SID筛选器隔离(SID filter quarantining)来保证接收到的来自受信任域的认证请求只包含受信任域中的安全主体的SID。SID过滤隔离确保SID history属性的的误用不会对信任域的完整性造成任何影响。

外部信任关系提供了对域林外的域中的资源的访问。下面这张示意图展示了外部信任关系是如何在windows server 2003域林和windows 2000域林之间使用的。

windows的域和域林间的信任是如何工作的_第4张图片
在上面这个示例中,两个外部的信任关系存在于windows server 2003域林和windows 2000域林。箭头指向的域是被信任的域,被信任的域可以访问信任域中的资源。

由于外部信任关系都是非传递性的,所以rome.europe.tailspintoys.com中的用户是访问不到wideworldimporters.com中的资源的,同样sales.wideworldimporters.com中的用户也是访问不到tailspintoys.com的

当不同域林中的域建立了信任关系之后,外部域的安全主体就可以访问内部域的资源。活动目录在内部域创建了一个外部的安全主体对象来代表每一个来自受信任的外部域的安全主体。这些外部的安全主体可以成为内部域的本地域组成员。外部安全主体的目录对象是由活动目录创建的而且不应该被手动修改。通过启用高级特性,你可以在活动目录的用户和计算机中查看外部安全主体对象。

下面这张示意图演示了windows server 2003域林和windows NT 4.0域之间的外部域信任关系的配置。

windows的域和域林间的信任是如何工作的_第5张图片

windows server 2003的林信任都启用了SID筛选器。启用SID筛选器可以防止受信任域中的高权限恶意用户提升受信任域中其他用户对信任域中资源的权限。

参考链接:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc755321(v=ws.10)#potential-threats-to-interforest-trusts

领域信任关系

在此不做详细描述

林信任关系

林信任关系通过提供对跨域林资源访问的支持来帮助你在你的组织内部管理分段的windows server 2003域中的基础结构。林信任关系对Application Service Provider、处于合并或收购过程中的公司、需要与外网进行协同合作的商务以及需要行政自治解决方案的公司。(不太明白最后这个场景的意思)

林信任关系可以提供以下好处:

  • 通过减少外部信任关系的数量来简化两个windows server 2003域林之间的资源管理
  • 每个域林中的每个域都拥有完整的双向信任关系
  • UPN(user principal name)的跨域认证
  • 通过同时使用Kerberos V5认证协议和NTLM认证协议来提高两个域林之间认证过程的可信赖度
  • 管理的灵活性。每个域林中的管理任务都是唯一的
  • 每个域林中的数据的安全性得到加强。敏感数据只能被数据所在的域林中的用户访问
  • 每个林中的目录复制操作都是独立的。Schema改动、配置改动以及新域的增加都只会在当前域林中产生影响,并不会影响到信任域林
  • windows server 2003域中SID筛选器的强制启用。SID筛选器可以确保SID历史属性的滥用不会影响到信任域的完整性。

通过使用林信任关系你可以将两个windows server 2003域林连接起来以形成一个单向或者双向的信任关系。林信任允许管理员将两个域林通过单个信任关系联系起来以提供无缝的跨域认证和授权体验。

林信任关系只能创建于两个林根域之间。林信任关系是绝对不可以扩展到第三个域林中的。意思就是林信任关系是不可能拥有传递性的。
windows的域和域林间的信任是如何工作的_第6张图片

Forest 1和Forest 3之间是没有信任关系的。

要使用林信任需要满足下面的要求。在你可以使用林信任之前,你必须确保两边的域林中的所有的域控制器都运行的是windows server 2003及以上版本。同时你还需要确保你拥有正常工作的DNS设备以及你创建了合适的活动目录功能级别。这意味着域林必须提升至windows server 2003级别及以上,且你不能在域林中安装额外的Windows 2000或者Windows NT 4.0的域控制器。

只有当你的域林中拥有下面的DNS配置时林信任才能被成功创建:

  • 有一个root DNS服务器,该DNS服务器同时是两个目标域林的命名空间的root DNS服务器:root zone包含每个DNS命名空间的委托且两个域林中的所有DNS服务器的root hints都包含该root DNS服务器。
  • 如果没有共享的DNS服务器,且每个域林中的DNS命名空间的root DNS服务器运行的是Windows server 2003家族的操作系统,DNS的条件转发需要在每个DNS命名空间中被配置以将其他命名空间的查询路由到正确的DNS服务器上
  • 和第二种情况一样,两个目标域林没有共享的DNS服务器,且每个域林中的DNS命名空间的root DNS服务器都运行着windows server 2003家族操作系统,第二种情况是在主DNS服务器上配置条件转发,还有一种情况就是在辅助只读DNS服务器上配置条件转发来路由DNS查询请求

只有林根域的Domain Admins组或者Enterprise Admins组的administrator才可以创建林信任关系。

Incoming Forest Trust Builders组的成员可以创建一个单向的、incoming林信任关系。举个栗子,Forest A中IFTB(Incoming Forest Trust Builders)的成员可以创建一个单向的,来自Forest B的incoming林信任关系。这个单向的、incoming林信任关系允许Forest A中的用户访问Forest B中的资源。IFTB组中的成员被赋予了在林根域创建Inbound林信任关系的权利。IFTB组中没有默认成员。

Windows NT Server 4.0、Windows 2000、Windows XP客户可以使用林信任来进行认证。尽管如此,Windows NT Server 4.0客户仅支持NTLM认证,而且不支持用户使用UPN登录到网络中。Windows Server 2003功能级别的林信任不能在Windows Server 2003域林和Windows 2000域林中创建。

信任关系的处理和交互

许多的域间和林间交互都依赖于域或者域林信任关系来完成各种各样的任务。这一节描述了当跨域资源访问或者身份验证时所发生的处理过程和交互行为。

认证引用概述

当一个认证请求被引用到域时,这个域的域控制器就必须在对该用户进行任认证之前决定请求来自的域是否和本域存在信任关系,以及该信任关系的信任流方向和传递性。发生在两个域之间的认证过程会因使用的认证协议而不同。Kerberos V5和NTLM认证协议在Windows 2000 Server和Windows Server 2003的认证引用过程是不同的,至于其他的认证协议,比如Digest和SChannel,Windows 2000 Server和Windows Server 2003都是支持的。

Kerberos V5引用过程

如果客户使用Kerberos V5进行认证,它会向他的账户所在域的域控制器申请一个用于访问目标域中的服务器的ticket。Kerberos KDC(Key Distribution Center)在服务器和客户端之间充当受信任的第三方的角色;它提供一个session key让Server和Client进行互相认证。如果目标域和客户所在域是两个域,那么KDC会进行一个逻辑处理来判断这个认证请求能不能被引用。

  1. 当前域是否直接被目标域信任?
    • 如果是,向客户端发送一个指向被请求域的引用
    • 如果不是,执行下一步
  2. 当前域和信任路径中的下一个域之间是否存在一个传递性的信任关系?
    • 如果是,向客户端发送一个指向信任路径中的下一个域的引用
    • 如果不是,向客户端发送一个logon-denied消息

NTLM引用处理过程

如果客户端使用NTLM认证协议,那么原始的认证请求将会直接从客户端发送到目标域中的资源服务器。这个服务器会向发送请求的客户端创建一个挑战。然后服务器将用户的响应发送给用户账户所在域的域控制器。域控制器在它的安全账户数据库中检查该用户的账户。如果账户不存在,该域控制器将需要通过下面的逻辑处理来决定是否发起pass-through认证过程,转发该请求,或者决绝该请求:

  1. 当前域和用户所在域是否存在着直接的信任关系?
    • 如果是,域控制器将用户的凭证发送给该用户所在的域控制器以进行pass-through认证过程。
    • 如果不是,执行下一步。
  2. 当前域和用户所在的域是否存在传递性的信任关系
    • 如果是,将认证请求发送给信任路径中的下一个域,这个域的域控制器重复上面加粗的过程。
    • 如果不是,向客户端发送一个logon-denied消息。

其他的认证协议引用处理过程

Windows 2000 Server和Windows Server 2003也支持在林信任中使用Digest和Schannel认证协议。这使得诸如Web服务器等技术可以在多域环境中完成他们的任务。SSL协议和证书通过Schannle映射到活动目录的用户账户,IIS使用Digest。具有信任关系的两个域可能会被要求进行Digest和SChannel认证,因为建立信任关系的两个域可能会存在防火墙,只允许HTTP协议的报文通过。Digest可以使用HTTP的头部进行传输。

只要通用的pass-through机制可以在目标域内找到合适的域控制器,Windows 2000 Server和Windows Server 2003将通过协商来决定在信任关系上使用哪种认证协议进行认证。管理员也可以选择使用SSP作为另一种认证方式。如果SSP与windows 2000 server和Windows server 2003分布式系统是兼容的,那么它就可以以标准的windows 2000 server和windows server 2003工作方式在跨域的信任关系上工作。

基于Kerberos的跨域(同林)认请求处理

位于同一域林中的活动目录域都具有双向且可传递性的信任关系,因此从一个域到另一个域的认证请求将会被路由到目标域以提供对资源的无缝访问。Windows 2000域控制器或者windows server 2003域控使用下面两种认证协议的其中一种进行用户和应用的认证操作:Kerberos V5或NTLM。一旦在他们自己的域中完成认证,用户就可以尝试使用活动目录授权获取该域林中所有域中的资源。

要想使用Kerberos认证来访问其他域中的共享资源,用户的电脑首先要在自己账户所在域的控制器申请一个用于访问信任域中的资源的ticket。这个ticket稍后会被一个可信的第三方颁发。(没太读懂官方文档的意思,没交代清楚这个可信的第三方到底是谁)。用户的电脑将ticket发送给位于信任域中的服务器以进行认证。

下面的示意图和响应步骤提供了一个关于跨域Kerberos认证过程的详尽描述。
windows的域和域林间的信任是如何工作的_第7张图片

上述过程是发生在同一个林中的。

  1. User 1使用自己在europe.tailspintoys.com域的凭证登录到Workstation 1。作为该过程的一部分,负责认证的域控制器向User 1颁发了一个ticket-granting ticket(TGT)。这个ticket被User 1用来向资源进行认证。User 1然后尝试访问位于asia,tailspintoys.com域中的file server上的共享资源\\fileserver1\share
  2. Workstation 1联系位于其所在域(ChildDC1)域控制器上的Kerberos KDC并请求一个FileServer 1的服务实体名称(SPN)票据。
  3. ChildDC1在自己的活动目录域数据库中找不到请求的SPN,然后它向全局编录请求查看当前林中是否有请求的SPN。然后全局编录将请求信息返回给ChildDC1。
  4. ChildDC1向Workstation 1发送引用。
  5. Workstation 1联系Forest RootDC1(ChildDC1的父域)域控制器以获取ChildDC2中的域控制器的引用。然后ForestRootDC1将该引用向Workstation 1。
  6. Workstation 1联系ChildDC2域上的KDC并为用户协商获取一个票据来访问FileServer 1.
  7. 一旦Workstation 1拥有了该服务票据,它就会向FileServer 1发送这个票据,然后FileServer 1将会读取用户的安全凭证并依此构建出访问令牌。

每一个域都有他自己的安全策略来管理资源的访问。这些策略是无法跨域的。

基于Kerberos的跨域林认证请求处理

当两个Windows Server 2003域林建立起林信任关系之后,使用Kerberos V5或者NTLM协议进行的认证请求可以在两个林中进行正确的路由来进行资源的访问。

当一个林信任被建立起来之后,每个林都会搜集所有的他的被信任域的命名空间并把这些信息存储到TDO中。被信任的命名空间包括其他域林中的域树名字,UPN后缀,SPN后缀和SID命名空间。TDO对象会被复制到全局编录。

在认证协议可以根据域林信任路径进行认证之前,承载着资源的计算机的SPN必须被解析到其他域林中。一个SPN可以有如下几种形式:主机的DNS名称域的DNS名称或者服务接入点对象的DN(distinguish name)。

当域林中的一个Workstation尝试访问另一个域林中的资源计算机时,Kerberos认证过程会联系域控制器获取一个要访问的资源计算机的SPN的service ticket。一旦域控制器向全局编录发起请求并判断出SPN并不在当前域林内,域控制器就会将其父域的引用返回给Workstation。这个时候,workstation向他的父域请求服务票据,并沿着信任路径找到目标计算机所在域的域控制器申请服务票据。

下面这张示意图和响应步骤提供了一个跨林Kerberos认证过程的详细描述。
windows的域和域林间的信任是如何工作的_第8张图片

  1. User 1使用europe.tailspintoys.com域中的凭证登录到Workstation 1。然后User 1尝试访问位于另一个域林usa.wingtiptoys.com中的FileServer 1中的共享资源。
  2. Workstation 1联系位于ChildDC1域的域控制器上的Kerberos KDC,然后向其申请一个FileServer 1的SPN的票据。
  3. ChildDC1域在自己的域数据库中找不到请求的SPN,然后向全局编录发起请求,因为全局编录只能存在于当前域中,所以它找不到请求的SPN(该SPN在另一个域林中),然后全局编录检查自己的数据,查找信任相关的信息,然后就发现还有一个域林与自己建立了信任关系,(上面说过,一旦林信任关系被创建之后,信任林就会手机被信任林中的一些信息并存到TDO对象中,这其中就包括SPN后缀),全局编录将TDO中的SPN后缀与请求中的SPN进行比对,发现两者相同,全局编录就会向ChildDC1返回一个route hints(告诉ChildDC1去向谁发起请求)。route hints可以帮助导向认证请求到正确的域林中。
  4. ChildDC1将其父域(当前林的林根域)的引用发回给Workstation 1。
  5. Workstation 1联系ForestRootDC1,请求一个位于wingtiptoys.com域中的ForestRootDC2的域控制器的引用。
  6. Workstation 1联系ForestRootDC2申请服务票据。
  7. ForestRootDC2联系全局编录,查找请求的SPN,全局编录找到了匹配的SPN,并将其返回给了ForestRootDC2。
  8. 然后ForestRootDC2将usa.wingtiptoys.com的引用返回给了Workstation 1。
  9. Workstation 1联系ChildDC2的KDC并协商得到一个用于访问FileServer 1的票据。
    10.一旦Workstation 1获得了服务票据,它就会将该服务票据发送给FileServer 1,然后FileServer 1读取安全凭证并依此构建出访问令牌。

在信任关系中使用到的网络端口

由于信任关系必需要在不同的网络边界中建立 ,所以可能会经过多个防火墙。在这种情况下,你通过开启防火墙上的某个端口来允许信任关系产生的网络流量通过。在Windows Server 2003中,这个过程被简化成为信任关系相关的服务配置RPC端口。有两个主要的端口需要配置:Local Security Authority RPC端口Net Logon RPC端口

Local Security Authority RPC端口

这个端口被用于信任关系的创建和对LSA策略数据库的访问

Net Logon RPC端口

这个端口被用于NTLM认证过程和安全通道的通信。

下面这张表格展示了在建立信任关系时需要打开的端口列表。

信任关系中会用到的端口

任务 出站端口 入站端口 From-To
同林中的两个域创建信任关系 LDAP(TCP/UDP:389)、Microsoft SMB(TCP:445)、Kerberos(UDP:88)、Endpoint resolution—portmapper(TCP:135)、Net Logon(活动端口) N/A 内部域的域控制器 ---- 外部域的域控制器(所有端口)
由内部域林到外部域林的信任关系的验证 LDAP(TCP/UDP:389)、Microsoft SMB(TCP:445)、Kerberos(UDP:88)、Endpoint resolution—portmapper(TCP:135)、Net Logon(活动端口) N/A 内部域的域控制器 ---- 外部域的域控制器(所有端口)
在外部域林中使用对象选取器向内部域林的组合DACLs中添加对象 N/A LDAP(TCP/UDP:389)、Windows NT Server 4.0目录服务(活动端口)、Net Logon(活动端口)、Kerberos(UDP:88)、Endpoion resolution portmapper(TCP:135) 外部服务器 ---- 内部域的PDC(kerberos)、外部域的域控制器 ---- 内部域的域控制器(Net Logon)
在外部域林中设置信任关系 N/A LDAP(TCP/UDP:389)、Microsoft SMB(TCP:445)、Kerberos(UDP:88) 外部域的域控制器 ---- 内部域的域控制器(所有端口)
内部域客户端对外部域使用Kerberos认证 Kerberos(UDP:88) N/A 内部域林客户端 ---- 外部域的域控制器(所有端口)
内部域客户端对外部域使用NTLM认证 N/A Endpoion resolution portmapper(TCP:135) 外部域的域控制器 ---- 内部域的域控制器(所有端口)
将内部网络的计算机加入到外部域中 LDAP(TCP/UDP:389)、Microsoft SMB(TCP:445)、Kerberos(UDP:88)、Endpoint resolution—portmapper(TCP:135)、Net Logon(活动端口)、Windows NT Server 4.0 目录服务( 活动端口) N/A 外部域的域控制器 ---- 内部域的域控制器(所有端口)

如果在实际应用中出现了139端口,那么改端口是为了向后兼容的。

要想指定你想在活动端口上运行的服务,你需要为该端口配置注册表。

建议使用组策略或者其他windows工具,比如MMC(Microsoft Management Console)来达到上述目的。

官方不建议直接修改这两个注册表键。

Settings for the Local Security Authority (LSA) RPC port are stored in the TCP/IP Port entry in the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters registry key.

Settings for the Net Logon RPC port are stored in the DCTcpipPort entry in the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parametersregistry key.

你可能感兴趣的:(Windows)