前言
域環境:
kerberos主要是在域環境做身份認證。什么是域環境呢?
域英文叫DOMAIN——域(Domain)是Windows網絡中獨立運行的單位,將網絡中多台計算機邏輯上組織到一起,進行集中管理, 這種區別於工作組的邏輯環境叫做域。
域環境的作用:
MS以后不要將名稱搞的這么專業,還是要考慮到中國的國情,早知道將"域"改成"中央"將"工作組"改成"自由市場",這樣方便易懂,就不會有這么多的問題了。
在下圖中 YUNYING.LAB 為其他兩個域的根域,NEWS.YUNYING.LAB 和 DEV.YUNYING.LAB 均為 YUNYING.LAB 的子域,這三個域組成了一個域樹。子域的概念可以理解為一個集團在不同業務上分公司,他們有業務重合的點並且都屬於 YUNYING.LAB 這個根域,但又獨立運作。同樣 TEST.COM 也是一個單獨的域樹,兩個域樹 YUNYING.LAB 和 TEST.COM 組合起來被稱為一個域林。
kerberos的認證過程
為什么需要kerberos:
kerberos目的是認證,既然認證就是辨別身份,那我輸入用戶名密碼不就好了,為何要有Kerberos這樣一個復雜的東西;舉例來說,有A,B,C三個服務器,分別提供不同的服務,user要訪問ABC都需要輸入用戶名密碼,但是ABC沒必要都存一份user的密碼,所以就衍生出一個中央服務器D來專門存儲用戶名密碼;如果user通過了D的認證,那就是合法的身份,就可以使用ABC任何一個服務,所以user需要告訴ABC它通過了D的認證。如何證明這個事情,以及信息在網絡傳輸過程如何防止被截獲篡改而假冒等等,解決這些問題就靠Kerberos。
kerberos的三個角色:
1.訪問服務的用戶
2.提供服務的server
3.KDC(ker DIstribution center)密鑰分發中心
其中 KDC 服務默認會安裝在一個域的域控中,而 Client 和 Server 為域內的用戶或者是服務,如 HTTP 服務,SQL 服務。在 Kerberos 中 Client 是否有權限訪問 Server 端的服務由 KDC 發放的票據來決定。
KDC 又分為兩個部分:
Authentication Server(AS):AS 的作用就是驗證 Client 端的身份,驗證通過就會給一張 TGT(Ticket Granting Ticket)票給 Client。
Ticket Granting Server(TGS):TGS 的作用是通過 AS 發送給 Client 的票(TGT)換取訪問 Server 端的票。
kerberos認證流程:
1>>> AS_REQ:用戶向KDA發起AS_REQ,請求的憑據是用戶hash加密的時間戳,內容為通過 Client 密碼 Hash 加密的時間戳、ClientID、網絡地址、加密類型等。
2>>> AS_KDA:KDA對用戶hash進行解密,驗證成功后返回給用戶由用戶密碼 HASH 加密的 sessionkey-as 和 TGT(由 KRBTGT HASH 加密的 sessionkey-as 和 TimeStamp 以及PAC,PAC里包含用戶的sid,用戶所在的組。)
3>>> TGS_REQ:用戶憑借TGT票據向KDC發起針對特定服務的TGS_REQ請求。
Client 接收到了加密后的 Sessionkey-as 和 TGT 之后,用自身密碼解密得到 Sessionkey-as,TGT 是由 KDC 密碼加密,Client 無法解密。這時 Client 再用 Sessionkey-as 加密 TimeStamp 和 TGT 一起發送給 KDC 中的 TGS(TicketGranting Server)票據授權服務器換取能夠訪問 Server 的票據。
4>>> TGS_REP:KDC使用krbtgt hash進行解密,如果正確,就返回用服務hash加密的TGS票據(這一步不管用戶有沒有對服務的訪問權限,只要TGT是正確的,就會返回TGS票據)
TGS 收到用戶發送過來的 TGT 和 Sessionkey-as 加密的 TimeStamp 之后,首先會檢查自身是否存在 Client 所請求的服務。如果服務存在,則用 KRBTGT 密碼解密 TGT。一般情況下 TGS 會檢查 TGT 中的時間戳查看 TGT 是否過期,且原始地址是否和 TGT 中保存的地址相同。驗證成功之后將用 sessionkey-as 加密的 sessionkey-tgs 和 Server 密碼 HASH 加密的 Sessionkey-tgs 發送給 Client。
5>>> AP_REQ:用戶用獲取的TGS票據去請求服務
6>>> AP_REP:服務器使用自己的hash去解密TGS票據,如果解密正確,就拿解密得到的PAC去KDA詢問用戶有沒有訪問權限,KDC解密獲取用戶的sid以及用戶所在的組,在根據服務的ACL,判斷用戶是否可以訪問該服務。
https://tools.ietf.org/html/rfc4120.html 詳細解讀