一、kerberos定義html
1. Kerberos 是一種網絡認證協議,其設計目標是經過密鑰系統爲客戶機 / 服務器應用程序提供強大的認證服務。服務器
2. Kerberos 做爲一種可信任的第三方認證服務,是經過傳統的密碼技術(如:共享密鑰)執行認證服務的。網絡
3. Kerberos也能達到單點登陸的效果,即當Client經過了Kerberos server的認證後,即可以訪問多個Real Server。加密
二、kerberos幾個重要組件spa
1. KDC:負責分發密鑰的密鑰分配中心設計
2. Client:須要使用kerbores服務的客戶端server
3. Service:提供具體服務的服務端htm
三、kerberos中幾個重要概念blog
1. Client master key: KDC中存儲的Client的密鑰get
2. Server master key: KDC中存儲的Server的密鑰
3. Sclient-Server:Client與Server之間的會話密鑰
4. Client Info:記錄了Client自己的Ip等基本信息
四、kerberos認證交互過程
1)client從KDC獲取Sclient-Server
1. 用client公鑰加密Sclient-Server發送給client【Sclient-Server + Client-master-key(加密)】
2. 用server公鑰加密Sclient-Server+ ClientInfo發送給client【Sclient-Server + ClientInfo + Server-master-key(加密)】
2)client用Sclient-Server加密發送數據
1. Client用本身的mClient-master-key解密KDC傳過來的第一個包得到會話密鑰Sclient-Server
2. 並用Sclient-Server加密本身的的信息和時間戳打包後傳送給Server,此時Client開始和Server交互
3)server用私鑰獲取Sclient-Server,並用Sclient-Server解密client信息
1. Server會收到兩個數據包,一個用會話密鑰(Sclient-Server)加密,一個用本身的(Server-master-key)加密。
2. Server先用本身的Server-master-key解密獲取會話密鑰(Sclient-Server)和一份關於Client的信息。
3. 而後Server拿到解密後獲取到的會話密鑰(Sclient-Server)再解開另一個數據包,得到另外一份關於Client的信息和時間戳。
五、kerberos認證圖解
六、kerberos細節
1)上面有個數據包是KDC經Client轉發給Server的,爲何不直接發給Server?
1. 由於Server可能給多個Client提供服務,這樣Server須要維護一個Client和會話密鑰的對應表,這對Server是一個負擔。
2)爲何要發兩份關於Client的信息給Server?
1. 經過這兩份數據的對比,Server就能判斷出是否是對的Client在訪問服務。
3)Client是如何判斷本身在訪問對的Server呢?
1. 由於Client給Server的一個數據包是用Server的master key來加密的因此只有對的Server才能解密。
4)爲何要用會話密鑰
1. 通訊方的master key是長期有效的,若是在網絡上傳輸,一旦被截取,理論上來講只要有足夠的時間是能夠破解的。
2. 因此咱們才用臨時的會話密鑰來通訊,一段時間後會話密鑰會過時,同時時間戳也防止了,惡意用戶重複使用同一個數據包。
5)爲何要用時間戳?
1. 若是Client向Server傳送的數據包被其餘的Client截取,而後本身拿來向Server請求服務這,這樣就會出問題
2. Server收到請求後將從解密後的數據包中得到的時間戳和當前時間對比,一旦超過必定範圍將直接拒絕請求
http://www.javashuo.com/article/p-vekswuot-co.html
http://www.javashuo.com/article/p-pgpapsfx-cx.html
1111111111111111111111111111