Kerberos認證

背景:基於RFC1510,Kerberos Version 5爲分佈式環境和與其他系統的交互標準提供增強的認證。Kerberos來源於希臘神話three-headed dog。三頭狗包含KDC(Key Distribution Center)、客戶端和提供資源或服務的服務器。KDC是安裝在域控制器上的,提供以下兩種服務:AS(Authentication Service)和TGS(Ticket-Granting Service)。認證過程如下圖所示:

認證過程:

l  AS Exchange

當初始化網絡登錄時,用戶需要提供用戶名和密碼,提供給KDC進行驗證。KDC訪問活動目錄中的用戶信息。當驗證成功後,用戶得到一個在本地域有效的TGT(Ticket to Get Tickets)。TGT有一個默認的生命週期10小時,在用戶登錄會話過程中可以自動更新,無需用戶再次提供用戶名和密碼。TGT被緩存在本地內存空間中,用來請求建立與網絡服務的會話。

如果啓用了預身份驗證,會使用用戶的密碼加密時間戳(Time stamp)。如果KDC使用活動目錄中用戶密碼的哈希值解密時間戳,得到一個有效的時間,KDC知道這不是在重複之前的請求。如果KDC通過客戶端的TGT請求,會回覆兩個信息:使用只有KDC(TGS)能夠解密的祕鑰加密的TGT(Ticket to Get Tickets;使用用戶密碼加密的會話祕鑰(session key,這個會話密鑰用於客戶端與KDC將來的通信。由於客戶端無法讀取TGT的內容,它只能將TGT提交給TGS請求服務票據(service ticket)。TGT包含生存週期,認證數據,與客戶端通信的會話祕鑰和客戶端名稱。

l  TGS Exchange

客戶端向TGS發送TGT,TGS使用自己的密鑰讀取TGT,如果TGS通過客戶端的請求,TGS爲客戶端和遠程服務器(目標服務器)創建一個服務票據(service ticket會話祕鑰(session key。客戶端通過之前從AS獲得的會話密鑰讀取服務票據(service ticket)並緩存在本地。

l  Client/ServerExchange

當客戶端擁有服務票據(service ticket),它就可以建立和目標服務器服務之間的會話。目標服務器可以使用自己和KDC之間長期的密鑰解密來自TGS的信息。服務票據(service ticket)被用於認證客戶端用戶和建立客戶端與服務器之間的服務會話。在服務票據(service ticket)的生命週期過期之後,需要續訂服務票據(serviceticket)。

客戶端把服務票據(service ticket)中服務器部分的內容提交給服務器,請求建立客戶端和服務器之間的會話。如果啓用了相互認證,目標服務器返回一個使用服務票據(service ticket)會話密鑰加密的時間戳。如果時間戳能夠被正確解密,那麼不僅客戶端被服務器認證,服務器也被客戶端認證。這樣,目標服務器就不需要直接和KDC交互,因此也減少了離線時間和KDC的負載。

l  本地登錄過程

當登錄本地系統的時候,在彈出登錄窗口的時候,密碼被單向哈希算法立即加密,然後開始向KDC請求一個TGT和服務票據(serviceticket)。過程和訪問遠程服務一樣。創建的訪問令牌(access token)包含用戶所有的安全組信息,這個訪問令牌被附加到用戶登錄會話,然後依次被其他用戶開啓的進程和應用繼承。

l  ReferralTickets

AS和TGS的功能是獨立的,用戶可以從一個域的AS請求TGT,並從另外一個域的TGS請求服務票據(service ticket)。

當兩個域之間建立了信任關係,客戶端可以通過referral tickets在請求另外一個域的服務時得到認證。當兩個域建立信任關係之後,基於信任密碼的interdomain key被用於認證KDC。示例如下:

1.        客戶端使用TGT聯繫本地域的KDC TGS,KDC發現這是請求到另外一個域的會話,返回一個用於另外一個域KDC認證的referral ticket;

2.        客戶端使用referral ticket聯繫遠程域的KDC。Referral Ticket是被interdomain key加密的,假設成功解密,遠程域的TGS返回一個service ticket。

3.        客戶端開始於服務器進行信息交互,並開始與遠程服務的會話。

更復雜的場景,即存在多域信任和域信任關係的傳遞,示例如下:

1.        使用域1的TGS獲得域2 KDC的referral ticket;

2.        使用referral ticket和域2的TGS交互,獲得域3的referral ticket;

3.        使用referral ticket和域3的TGS交互,獲得service ticket;

4.        通過客戶端和服務器交互,開啓和遠程服務的會話。

l  轉發和代理

有一些服務需要訪問第二個服務器,比如說後端的數據庫服務器,爲了建立和第二個服務器的會話,主服務器(第一個服務器)需要能夠代表客戶端的用戶賬號和認證等級被認證,這可以通過轉發或者代理認證實現。

參考鏈接:

https://msdn.microsoft.com/en-us/library/bb742516.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章