Windows系統中如何完成Kerberos認證協議
原創【51CTO獨家特稿】Kerberos認證協議定義了客戶端和稱為密鑰分配中心KDC(Key Distribution Center)的認證服務之間的安全交互過程。Windows 2000在每一個域控制器中應用KDC認證服務,其域同Kerberos中的realm功能類似,具體可參考RFC 1510協議。Windows 2000中采用多種措施提供對Kerberos協議的支持:Kerberos客戶端使用基于SSPI的Windows 2000安全提供者,初始Kerberos認證協議同WinLogon的單次登錄進行了集成,而Kerberos KDC也同運行在域控制器中的安全服務進行了集成,并使用活動目錄作為用戶和組的賬號數據庫。
Kerberos是基于共享密鑰的認證協議,用戶和密鑰分配中心KDC都知道用戶的口令,或從口令中單向產生的密鑰,并定義了一套客戶端、KDC和服務器之間獲取和使用Kerberos票據的交換協議。當用戶初始化Windows登錄時,Kerberos SSP利用基于用戶口令的加密散列獲取一個初始Kerberos票據TGT,Windows 2000把TGT存儲在與用戶的登錄上下文相關的工作站的票據緩存中。當客戶端想要使用網絡服務時,Kerberos首先檢查票據緩存中是否有該服務器的有效會話票據。如果沒有,則向KDC發送TGT來請求一個會話票據,以請求服務器提供服務。
請求的會話票據也會存儲在票據緩存中,以用于后續對同一個服務器的連接,直到票據超期為止。票據的有效期由域安全策略來規定,一般為8個小時。如果在會話過程中票據超期,Kerberos SSP將返回一個響應的錯誤值,允許客戶端和服務器刷新票據,產生一個新的會話密鑰,并恢復連接。
在初始連接消息中,Kerberos認證協議把會話票據提交給遠程服務,會話票據中的一部分使用了服務和KDC共享的密鑰進行了加密。因為服務器端的Kerberos有服務器密鑰的緩存拷貝,所以,服務器不需要到KDC進行認證,而直接可以通過驗證會話票據來認證客戶端。在服務器端,采用Kerberos認證系統的會話建立速度要比NTLM認證快得多,因為使用NTLM,服務器獲取用戶的信任書以后,還要與域控制器建立連接,來對用戶進行重新認證。
Kerberos會話票據中包含有一個唯一的、由KDC創建的、用于客戶端和服務器之間傳輸數據和認證信息加密的會話密鑰。在Kerberos模型中,KDC是作為產生會話密鑰的可信第三方而存在的,這種形式更適合于分布式計算環境下的認證服務。
Kerberos作為基本的Windows 2000認證協議,與Windows 2000認證和存取控制安全框架進行了緊密整合。初始的Windows域登錄由WinLogon提供,它使用Kerberos安全提供者(security provider)來獲取一個初始的Kerberos認證協議票據。操作系統的其他組件,如轉向器(Redirector)則使用安全提供者的SSPI接口來獲取一個會話票據,以連接對遠程文件存取的SMB服務器。
Kerberos V5協議在會話票據中定義了一個攜帶授權數據的加密域,該域的使用留給了應用開發,而Windows 2000則使用Kerberos票據中的授權數據來附帶代表用戶和組成員的Windows 安全ID。在服務器端的Kerberos安全提供者則使用授權數據來建立代表用戶的一個Windows安全存取控制令牌,可以模擬客戶端來請求提供相應服務。
Windows 2000中應用了Kerberos協議的擴展,除共享密鑰外,還支持基于公/私鑰對的身份認證機制。Kerberos公鑰認證的擴展允許客戶端在請求一個初始TGT時使用私鑰,而KDC則使用公鑰來驗證請求,該公鑰是從存儲在活動目錄中用戶對象的X.509證書中獲取的。用戶的證書可以由權威的第三方,如VeriSign和Digital IDs等來發放,也可以由Windows 2000中的微軟證書服務器來產生。初始認證以后,就可以使用標準的Kerberos來獲取會話票據,并連接到相應的網絡服務。
通過對Kerberos認證協議進行公鑰擴展,可以使用戶采用多種方式來登錄工作站和網絡,如采用智能卡技術。智能卡中一般存儲有用戶的私鑰,可用于Kerberos的初始化認證處理。
目前,使用公鑰技術來擴展Kerberos認證協議的計劃和建議已經提交到IETF來進行標準化推廣。
【51CTO獨家特稿,合作站點轉載請注明原文譯者和出處?!?/p>
【編輯推薦】