Kerberos 是一種網絡認證協議,其設計目標是通過密鑰系統為客戶機 / 服務器應用程序提供強大的認證服務。該認證過程的實現不依賴於主機操作系統的認證,無需基於主機地址的信任,不要求網絡上所有主機的物理安全,並假定網絡上傳送的數據包可以被任意地讀取、修改和插入數據。在以上情況下, Kerberos 作為一種可信任的第三方認證服務,是通過傳統的密碼技術(如:共享密鑰)執行認證服務的。
在kerberos認證過程中,會有以下幾個角色:
- KAS(Kerberos Authentication Server)= 認證服務器
- KDC(Key Distribution Center)= 密鑰分發中心
- TGT(Ticket Granting Ticket)= 票據授權票據,票據的票據
- TGS(Ticket Granting Server)= 票據授權服務器
- SS(Service Server)= 特定服務提供端
第一步:用戶向KAS發送 用戶名和用戶加密的請求信息的Request消息

1.5 KAS查找對應用戶的密碼,后生成一個hash,生成一個秘鑰(用密碼生成hash )對Authenticator進行解密。如果解密后的內容和已知的內容一致,則證明請求者提供的密碼正確,即確定了登錄者的真實身份。注意,僅僅是驗證是否存在,不會驗證對錯。
TGT的有效時間,有的地方叫Timestamp ,KAS同當前的時間進行比較,如果他們之間的偏差超出一個可以接受的時間范圍(一般是5mins),AS 會直接拒絕該 Client 的請求。當AS Request中的 Timestamp 早於上次認證時間點,也是直接拒絕。
第二步:提供給合法請求用戶TGT和使用用戶加密的TGS session key

如果你的密碼是正確的,你就能解密第二部分信息,獲取到TGS session key。如果,密碼不正確,無法解密,則認證失敗。
第一部分信息TGT,你是無法解密的,但需要暫時緩存起來。
注:有的地方會將TGS session key定義為Logon Session Key
TGT的生命周期一般為10-8小時
第三步:用戶向TGS發送HTTP請求和KAS給的TGT和使用TGS session key加密的用戶信息

TGS檢查過程:
1)檢查數據庫中是否包含有你請求的Http服務名。如果無,直接返回錯誤信息。
2)通過KDC的密碼解密TGT,獲打開TGT取到TGS Session key。
3)通過TGS Session key解密你傳輸的第一部分認證器,獲取到你的用戶名和時間戳。
4)驗證加密認證器中的信息是否正確。
- 對比TGT中的用戶名與認證器中的用戶名
- 比較時間戳,不能超過一定范圍
- 檢查是否過期
- 檢查IP地址是否一致
- 檢查認證器是否已在TGS緩存中(避免應答攻擊)
- 可以在這部分添加權限認證服務
第四步:TGS向用戶發送ST和TGS session key加密的Http Service Session Key信息

你收到信息后,通過TGS Session Key解密,獲取到了Http Service Session Key,但是你無法解密ST。
第五步:用戶發送請求到具體要訪問的應用

Http服務端通過自己的密碼解壓ST(KDC是用Http服務的密碼加密的),這樣就能夠獲取到Http Service Session Key,解密第一部分。
使用Http Service Session Key服務端解密好ST,對比如下信息:
- ST中的用戶名(KDC給的)與認證器中的用戶名
- 比較時間戳,不能超過一定范圍
- 檢查是否過期
- 檢查IP地址是否一致
- 檢查認證器是否已在HTTP服務端的緩存中(避免應答攻擊)
第六步:訪問的應用返回值,用戶驗證服務是否合法

你在通過緩存的Http Service Session Key解密這部分信息,然后驗證是否是你想要的服務器發送給你的信息。完成你的服務器的驗證。
至此,整個過程全部完成。全過程利用的對稱加密技術。時間戳是為了解決重放攻擊的問題
缺點
- KDC可能成為單一故障
- 秘密密鑰存儲在用戶的工作站上
- 會話密鑰存儲在用戶的緩存或密鑰表中
- 所有客戶端必須時間同步
SESAME(多廠商環境下歐洲安全應用系統)被開發解決kerberos中的一些弱點,使用公鑰密碼學進行密鑰分配,並提供額外的訪問控制支持
SESAME解決了時隙重放的問題,kerberos和SESAME存在一個共同的問題是對靜態空口令猜測
使用PAS和PAC的身份驗證協議,基於對稱和非對稱密碼
Kerberos使用票證來驗證用戶身份,SESAME使用特權屬性證書(PAC)驗證,PAC包括主體的身份、訪問的客體的功能、訪問時限和PAC的生命周期
PAC使用數字簽名技術,因此客體可以驗證它是否來自可信任的驗證服務器,即特權服務器(PAS)
PAS和kerberos內的密鑰分發中心(KDC)承擔相似的角色。在用戶驗證服務處成功驗證了身份后,他便被授予一個令牌再發送給PAS
PAS創建一個PAC以供用戶出示給他訪問的資源
SESAME驗證過程:
1)用戶發起請求到AS(認證服務器)
2)AS發送一個token給用戶,用於與PAS通信
3)用戶發起訪問請求,並將token發送給PAS
4)PAS創建會話,並發送PAC給用戶
5)用戶發送PAC去認證訪問資源
特別聲明:
1.以上所有描述內容部分參考鏈接/文獻未逐一列出,若有侵權,請及時告知,有則改之無則加勉。
2.以上僅是學習過程的總結,相信有很多理解偏差的地方,特別希望指出,給予幫助,更新知識體系,共同進步。
參考鏈接:
https://blog.csdn.net/wy_97/article/details/87649262
windows 域認證 Kerberos詳解
https://www.cnblogs.com/zhaojonjon/p/5967281.html
ldap + kerberos 整合
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">