Kerberos认证

发布于:2023-01-23 ⋅ 阅读:(571) ⋅ 点赞:(0)

目录

Kerberos介绍

认证组成角色

认证流程

AS(Authentication Service)Exchange

TGS(Ticket Granting Service)Exchange

CS(Client/Server )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身份)

        


网站公告

今日签到

点亮在社区的每一天
去签到