天天看点

[kerberos] kerberos 认证详解

什么是kerberos认证?

kerberos 认证是一种用于验证通信双方身份的网络协议。即帮助客户端和服务端证明 我是我自己 ,从而使得通信双方可以完全信任对方身份

kerberos 角色组成?

  • 客户端(client):发送请求的一方
  • 服务端(Server):接收请求的一方
  • 密钥分发中心(Key Distribution Center,KDC)

    ,而密钥分发中心一般又分为两部分,分别是:

    • AS(Authentication Server):认证服务器,专门用来认证客户端的身份并发放客户用于访问TGS的TGT(票据授予票据)
    • TGS(Ticket Granting Ticket):票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(Ticket)
[kerberos] kerberos 认证详解

kerberos 认证的过程

  1. 客户端和服务端在参与认证之前,都会为自己创建一个用户名,在kerberos 中叫做principal。一般命名规则为 principalName/hostname.域名,然后给对应的principle创建一个秘钥,keytab
  2. 一般 如果客户端想要与开启kerberos 认证的服务端进行通信的话,需要三次连接
    1. 第一次连接:让kdc与client相互信任
      1. 客户端将自身信息通过明文的方式发送给kdc中的AS(AS是KDC中专门用来认证客户端身份的认证服务器)
      2. AS收到信息后,先看数据库中是否存在,不存在认证直接失败,如果存在,会返回给客户端两部分内容

        1. 用TGS进行加密的TGT(票据授予票据),该部分客户端无法解密

        2. 用客户端秘钥进行加密的内容,客户端拿到该内容后可以直接进行解密,拿到时间戳和需要访问的TGS信息,如果时间戳的与自己发送请求时的时间戳相差五分钟,会认定该AS返回的数据是伪造的,如果在时间范围内,证明该客户端是被kdc服务所信任的客户端,该内容中含有CT_SK(客户端和TGS间通信的Session_key)

        [kerberos] kerberos 认证详解
    2. 第二次连接:获取访问服务器的票据ticket
      1. 客户端通过自身秘钥,解析出第二部分内容,拿到CT_SK 对自身信息进行加密,然后将自身信息和TGT和想要访问的server(明文方式)一起发送给目标的TGS
      2. TGS 拿到数据后
        1. 查看server_ip 是否存在于数据库中,不存在认证直接失败
        2. TGS使用秘钥将TGT进行解密。拿到CT_SK 将客户端加密的信息一起解密,然后对比时间戳是否超出时延,对比TGT中信息和客户端加密的信息是否相符,相符则返回信息
      3. TGS 返回的信息
        1. 第一部分:用于访问server的票据ST,该票据使用了server的密码进行加密
        2. 第二部分:使用CT_SK进行加密的信息,该信息中包含CS_SK (客户端和服务端之间通信的session_key)
    [kerberos] kerberos 认证详解
    1. 第三次连接:访问目标服务器
      1. 客户端收到消息后,使用CT_SK 进行解密,拿到时间戳后判断时延,没有问题则向server 发起最后的请求
        1. 客户端 将自身信息使用cs_sk 进行加密,和ST一起发送给服务器
      2. 服务器接收到请求后
        1. 使用自身密码进行解密st,拿到 cs_key,通过cs_key解密第二部内容,将拿到的内容和kdc发送给自己的内容进行对比,如果正确则证明client是经过kdc认证过后的
        2. 服务其返回一段使用cs_key 加密的信息告诉客户端表示已经接收到该请求,客户使用本地缓存的cs_key进行解密之后,也确定了服务器的身份
      [kerberos] kerberos 认证详解

认证全过程的时序图

[kerberos] kerberos 认证详解

继续阅读