• Kerberos认证


    目录

    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身份)

            

  • 相关阅读:
    java-net-php-python-ssm仓库管理系统计算机毕业设计程序
    Java语言程序设计-关键术语(第一弹)
    Mac vsCode快捷键总结
    Ubuntu 23.10 支持基于 TPM 的全磁盘加密
    树莓派移植FFmepg记录(x264、硬件编码支持)
    基于ssm+vue的班级同学录网站管理系统 elementui
    淘宝客商品列表api,Onebound全平台电商API
    基于ubuntu 22, jdk 8x64搭建图数据库环境 hugegraph--google镜像chatgpt
    【图像融合】基于matlab粒子群优化自适应多光谱图像融合【含Matlab源码 004期】
    【专项测试系列】-缓存击穿、穿透、雪崩专项测试
  • 原文地址:https://blog.csdn.net/smli_ng/article/details/126261346