今天抽時間初略學習了一下kerberos網路認證過程,作為筆記整理如下,希望與大家分享。
一、Kerberos初步定義:
Kerberos這一名詞來源於希臘神話“三個頭的狗——地獄之門守護者”。Kerberos 是一種網路認證協議,其設計目標是通過密鑰系統為客戶機 / 伺服器應用程式提供強大的認證服務。該認證過程的實現不依賴於主機作業系統的認證,無需基於主機地址的信任,不要求網路上所有主機的物理安全,並假定網路上傳送的資料包可以被任意地讀取、修改和插入資料。在以上情況下, Kerberos 作為一種可信任的第三方認證服務,是通過傳統的密碼技術(如:共用密鑰)執行認證服務的。
Kerberos 服務是單點登入系統,這意味著您對於每個會話只需向服務進行一次自我驗證,即可自動保護該會話過程中所有後續事務的安全。服務對您進行驗證後,即無需在每次使用基於 Kerberos 的命令(如ftp 或 rsh)或訪問 NFS 檔案系統上資料時都進行自我驗證。因此,無需在每次使用這些服務時都在網路上發送口令(口令在網路上可能會被攔截)。
二、Kerberos認證工作過程:
主要分要兩大步驟,見圖進行說明:
步驟一:申請並擷取TGT,具體步驟如下
1.Client向KDC發送自己的身份資訊(Info C)
2. KDC收到Client的身份資訊後,從Ticket Granting Service得到TGT(ticket-granting ticket)
3. KDC用協議開始前產生的Client與KDC之間的密鑰(Key A)將TGT加密回複給Client。
4. Client使用Key A把加密後的TGT解密得到非加密的TGT。由於此密鑰是Client與KDC之間的密鑰,所以此時只有真正的Client才能利用它與KDC之間的密鑰將加密後的TGT解密,從而獲得TGT。(此過程避免了Client直接向KDC發送密碼,以求通過驗證的不安全方式)
步驟二: Client利用之前獲得的TGT向KDC請求其他Service的Ticket,從而通過其他Service的身份鑒別。具體步驟如下:
5. Client將之前獲得TGT和要請求的服務資訊(Info CS )發送給KDC
6. KDC中的Ticket Granting Service將為Client和Service之間產生一個Session Key用於Service對Client的身份鑒別。
7. KDC將這個Session Key和使用者名稱,使用者地址(IP),服務名,有效期間, 時間戳記一起封裝成一個Ticket--(Service Tictket) (這些資訊最終用於Service對Client的身份鑒別)發送給Service, 不過Kerberos協議並沒有直接將Ticket發送給Service,而是通過Client轉寄給Service.所以有了第8-11步。
8. 此時KDC將剛才的Ticket轉寄給Client。由於這個Ticket是要給Service的,不能讓Client看到,所以KDC用協議開始前KDC與Service之間的密鑰(Key C)將Ticket加密後再發送給Client。同時為了讓Client和Service之間共用那個秘密(KDC在第一步為它們建立的Session Key), KDC用Client與它之間的密鑰將Session Key加密隨加密的Ticket一起返回給Client。也即是說:Client與Service之間的Session Key(Key B)發出了兩個副本,一個是發給Client的,一個是發給Service的,發給Client的可由Client解密取出使用,但發給Service的由於是由Key C加密,經由Client轉寄給Service,所以,Client不能取出,到了Service端後可由Service端取出。
9. 為了完成Ticket的傳遞,Client將剛才收到的Service Ticket轉寄到Service. 由於Client不知道KDC與Service之間的密鑰,所以它無法算改Ticket中的資訊,只能老老實實地完成轉寄任務。
10.Client將收到的Session Key解密出來(用Key A解密)
11.Client將自己的使用者名稱,使用者地址(IP)打包成Authenticator用前面得到的Session Key(Key B)加密後也發送給Service。
12.Service 收到Ticket後利用它與KDC之間的密鑰(Key C)將Ticket中的資訊解密出來,從而獲得Session Key和使用者名稱,使用者地址(IP),服務名,有效期間。然後再用Session Key(Key B)將Authenticator解密從而獲得使用者名稱,使用者地址(IP)將其與之前Ticket中解密出來的使用者名稱,使用者地址(IP)做比較從而驗證Client的身份。
13. 如果Service有返回結果,將其返回給Client。