目录
- 域
- 域认证之Kerberos
域
计算机域就是一个有边界的计算机的集合,在同一个域中的计算机已经建立了信任,访问其他机器时不需要被访问的机器的许可。
域可以通过活动目录进行统一的管理。
Active Directory(活动目录)功能
- 对服务器和客户端计算机进行管理
- 用户服务资源管理
- 桌面配置
- 应用系统支撑
设置域的优点有:
- 进行统一的管理
- 便捷的访问资源
- 集中的身份验证
- 可扩展性强
域认证之Kerberos
Kerberos
Kerberos 是一个三头怪兽,之所以用它来命名一种完全认证协议,是因为整个认证过程涉及到三方:客户端、服务端和 KDC(Key Distribution Center)。在 Windows 域环境中,KDC 的角色由 DC(Domain Controller)来担当。
Kerberos
- Client
- Sever
- KDC(Key Distribution Center) = DC(Domain Controller)
下面是一些简写
简写 | 全拼 | 说明 |
DC | Domain Controller 域控 | 域控制器是指在“域”模式下,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作,相当于一个单位的门卫一样,称为“域控制器(Domain Controller,简写为DC)”。 |
KDC | Key Distribution Center 密钥分发中心 | 密钥分发中心(KDC Key Distribution Center)是一种运行在物理安全服务器上的服务。KDC维护着领域中(与Windows中的域相当)所有安全主体(Security Principal)账户信息数据库。 |
AD | Account Database 账户数据库 | 类似于本机SAM的一个数据库,存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT |
AS | Authentication Service 身份验证服务 | 为client生成TGT的服务(简称AS) |
TGS | Ticket Granting Service 票据授与服务 | 为client生成某个服务的ticket(简称TGS) |
TGT | Ticket Granting Ticket 票据中心授予的票据 | 入场券,通过入场券能够获得票据,是一种临时凭证的存在。 |
域认证粗略流程
- Client 先向Kerberos服务请求访问服务器权限。Kerberos的AS判断Client是否在白名单上,如果在,就返回TGT(入场卷)和AS给Client。
- Client得到TGT后,带着TGT向Kerberos请求,Kerberos发现TGT后就会将ticket给Client。
- Client得到ticket后就可以拿着ticket去请求需要访问的服务器。
域认证流程
第一步,Client向KDC 的 AS发送Authenticator1,内容为通过 Client 密码 hash 加密的时间戳、Client ID、网络地址、加密类型等内容。KDC接受到Authenticator1后查看用户名是否在白名单中,然后提取用户名对应的NTLM Hash。此时KDC会生成一个随机的字符串叫Session Key,用用户名对应的NTLM Hash加密Session Key作为AS数据。使用KDC中krbtgt对应的NTML Hash加密Session Key作为TGT。KDC将AS和TGT发送给Client。
第二步,Client发送TGT和用自己NTLM Hash解密出来的Session Key加密的客户端信息跟时间戳给KDC中的TGS。KDC的TGS接受到TGT和其他内容会先解密TGT从TGT中提取Session Key再用Session Key解密其他内容。解密出来的内容和Client提供的内容对比来效验Client是否可信。验证通过后会生成一个新的Session Key,我们称之为Server Session Key,主要用于与服务器通信。同时还会生成一个Ticket。将Ticket发送给Client。
第三步,客户端带着Ticket访问服务器。服务器端通过解密Ticket解密Server Session Key(Client info + Timestamp)。比较时间长度。如果通过,认证成功,该票据会一直存在客户端内存中。
Client->AS:发送 Authenticator1(Client 密码加密 TimeStamp)
AS->Client:发送 Client 密码加密的 sessionkey-as 和票据 TGT(KBRTGT HASH 加密的 sesionkey-as 和 Timestamp)
Client->TGS 发送 Authenticator2(sessionkey-as 加密 timestamp)和票据 TGT(KBRTGT HASH 加密的 sessionkey-as 和 timestamp)
TGS->Client:发送密文(由 sessionkey-as 加密的 sessionkey-tgs)和票据 ST(由 server 密 码 hash 加密的 sessionkey-tgs)
Client->Server 发送 Authenticator3(sessionkey-tgs 加密 timestamp)和票据 ST(Server 密码 hash 加密的 sessionkey-tgs)
Server->Client :
这里借鉴了倾旋大佬的笔记。如有侵权请联系作者。