目录

  • 域认证之Kerberos


计算机域就是一个有边界的计算机的集合,在同一个域中的计算机已经建立了信任,访问其他机器时不需要被访问的机器的许可。

域可以通过活动目录进行统一的管理。
Active Directory(活动目录)功能

  1. 对服务器和客户端计算机进行管理
  2. 用户服务资源管理
  3. 桌面配置
  4. 应用系统支撑

设置域的优点有:

  • 进行统一的管理
  • 便捷的访问资源
  • 集中的身份验证
  • 可扩展性强

域认证之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 票据中心授予的票据

入场券,通过入场券能够获得票据,是一种临时凭证的存在。

java kerberos认证的es kerberos认证优缺点_Server


域认证粗略流程

  1. Client 先向Kerberos服务请求访问服务器权限。Kerberos的AS判断Client是否在白名单上,如果在,就返回TGT(入场卷)和AS给Client。
  2. Client得到TGT后,带着TGT向Kerberos请求,Kerberos发现TGT后就会将ticket给Client。
  3. Client得到ticket后就可以拿着ticket去请求需要访问的服务器。

域认证流程

java kerberos认证的es kerberos认证优缺点_服务器_02

第一步,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。

java kerberos认证的es kerberos认证优缺点_客户端_03


第二步,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。

java kerberos认证的es kerberos认证优缺点_Server_04

第三步,客户端带着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 :

这里借鉴了倾旋大佬的笔记。如有侵权请联系作者。