目录
AS(Authentication Service)Exchange
TGS(Ticket Granting Service)Exchange
Kerberos介绍
Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
认证组成角色
客户端(Client)
服务端(Server)
密钥颁发中心(Key Distribution Center,KDC),默认安装在DC (域控制器)上Kerberos的主要服务,由AS和TGS组成。
AS (Authentication Server):认证服务器,认证用户身份并为其发放TGT
TGS (Ticket Granting Server):票据授予服务器,用来发放客户端访问服务器端的ST
TGT(Ticket Granting Ticket):票据授予票据
ST (Server Ticket) :服务票据
认证流程
Kerberos认证流程分为三个Sub-Protocol,可能大家不是明白,那我简略描述一下,然后在具体介绍一下这个流程,非常简单易懂,对黄金票据和白银票据原理理解很有帮助。
- Authentication Service Exchange:Client向KDC申请TGT
- Ticket Granting Service Exchange:Client通过获得TGT向DKC申请用于访问Server的Ticket
- Client/Server Exchange:Client最终向为了Server对自己的认证向其提交Ticket
AS(Authentication Service)Exchange
Client向KDC中的AS发送Authentication Service Request(KRB_AS_REQ),为确保KRB _AS_REQ仅限于自己和KDC知道,Client使用自己的Master Key对KRB_AS_REQ主体进行加密。KRB _AS _ REQ的主体内容如下:
- Pre-authentication data:包含用于证明自己身份的信息,是一个被Client的Master Key加密过的Timestamp
- Client name &realm:简单来说就是Domain name\Client
- Server Name:KDC的TGS的Server Name
AS接受到KRB_AS_REQ之后,要验证Client的身份,AS从Domain的Account Database提起Client对应的Master Key对Pre-authentication data进行解密,如果是一个合法的Timestamp ,则可以通过验证。然后AS将Authentication Service Response(KRB_AS_RE P)发送给Client。KRB _ AS_REP包含两个部分:由Client的Master Key加密过的Logon Session Key和被KDC的Master Key 加密的TGT。TGT主体内容如下:
- Logon Session Key:SKDC-Client
- Client name&realm:简单来说就是Domain name\Client
- End time:TGT到期的时间
Client通过自己的Master Key对第一部分进行解密获得Logon Session Key(SKDC-Client)之后,携带着TGT便可以进入下一步TGS(Ticket Granting Service)Exchange
TGS(Ticket Granting Service)Exchange
Client向KDC中的TGS发送发送 Ticket Granting Service Request(KRB_TGS_REQ),KRB_TGS_REQ主体内容如下:
- TGT: 被KDC的Master Key加密过的TGT
- Authenticator:用来证明TGT的拥有者是否是自己,使用Logon Session Key进行加密
- Client name &realm::P简单来说就是Domain name \Clientl
- Server name &realm:简单来叔就是Domain name \Server
TGS收到KRB_TGS_REQ之后,要验证Client的身份,TGS通过自己的master Key对Client提供的TGT进行解密,得到Logon Sesssion Key,然后在利用Logon Sesssion Key在对Authe nticator进行验证,验证通过向Client发送Ticket Granting Service Response(KRB_TGS _R EP),KRB_TGS_REP由两部分组成:使用Logon Session Key 加密过的用于Client和Server的Session Key(SServer-Client)和使用Server的Master Key进行加密的Server Ticket。Server Ticket主体内容如下:
- Session Key:SServer-Client
- Client name&relm:简单来说就是Domain name\Client
- End time:Ticket的到期时间
Client接收到KRB_TGS_REP中户,使用Logon Session Key(SKDC-Client)解密第一部分获得Session Key(SServer-Client),有了Session Key和Server Ticket,Client就可以和Server进行交互,而无需通过KDC作中间人了。因此我们说Kerberos是一种高效的认证方式,他可以直接通过Client和Server双方来完成,不像Windows NT 4下的NTLM认证方式,每次认证都要通过一个双方信任的第三方来完成。
CS(Client/Server )Exchange
Client向Server发送Application Server Request(KRB_AP_REQ),KRB_AP_REQ主体内容如下:
- Server Ticket:被Server的Master Key加密过的Server Ticket
- Authenticator:使用Session Key进行加密
- Flag:用于表示Client是否需要进行双向验证
Server接收到KRB_AP_REQ,用自己的Master Key解密Server Ticket,从而获得Session Key(SServer-Client),通过Session Key(SServer-Client)解密Authenticator,进而验证对方身份。验证成功,让Client访问需要访问的资源,否则直接拒绝对方的请求。(对于需要双向验证,Server从Authenticator提取Timestamp,使用Session Key(SServer-Client)进行加密,并发送给Client用于Client验证Server身份)