天天看點

[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 認證詳解

繼續閱讀