Kerberos简介,概述,协议内容,3次通信
3.Kerberos
3.1.官網
https://web.mit.edu/kerberos/
3.2.前言
3.2.1.概述
Kerberos是一種計算機網絡認證協議,它允許某實體在非安全網絡環境下通信,向另一個實體以一種安全的方式證明自己的身份。它也指由麻省理工實現此協議,并發布的一套免費軟件。
它的設計主要針對客戶-服務器模型,并提供了一系列交互認證——用戶和服務器都能驗證對方的身份。Kerberos協議可以保護網絡實體免受竊聽和重復攻擊。
Kerberos協議基于對稱密碼學,并需要一個值得信賴的第三方。Kerberos協議的擴展可以為認證的某些階段提供公鑰密碼學支持。
主要功能如下:
?是一個安全認證協議
?用tickets驗證
?避免本地保存密碼和在互聯網上傳輸密碼
?包含一個可信的第三方
?使用對稱加密
?客戶端與服務器(非KDC)之間能夠互相驗證。
Kerberos只提供一種功能——在網絡上安全的完成用戶的身份驗證。它并不提供授權功能或者審計功能。
3.2.2.協議內容
協議的安全主要依賴于參加者對時間的松散同步和短周期的叫做Kerberos票據的認證聲明。 下面是對這個協議的一個簡化描述,將使用以下縮寫:
AS(Authentication Server)= 認證服務器
KDC(Key Distribution Center)= 密鑰分發中心
TGT(Ticket Granting Ticket)= 票據授權票據,票據的票據
TGS(Ticket Granting Server)= 票據授權服務器
SS(Service Server)= 特定服務提供端
1、客戶端用戶發送自己的用戶名到KDC服務器以向AS服務進行認證。
2、KDC服務器會生成相應的TGT票據,打上時間戳,在本地數據庫中查找該用戶的密碼,并用該密碼對TGT進行加密,將結果發還給客戶端用戶。該操作僅在用戶登錄或者kinit申請的時候進行。
3、客戶端收到該信息,并使用自己的密碼進行解密之后,就能得到TGT票據了。這個TGT會在一段時間之后失效,也有一些程序(session manager)能在用戶登錄期間進行自動更新。當客戶端用戶需要使用一些特定服務(Kerberos術語中用”principal”表示)的時候,該客戶端就發送TGT到KDC服務器中的TGS服務。當該用戶的TGT驗證通過并且其有訪問所申請的服務時,TGS服務會生成一個該服務所對應的ticket和session key,并發給客戶端。客戶端將服務請求與該ticket一并發送給相應的服務端即可。具體的流程請看下面的描述。
簡單地說,用戶先用共享密鑰從某認證服務器得到一個身份證明。隨后,用戶使用這個身份證明與SS通信,而不使用共享密鑰。
3.2.3 3次通信和其它知識點
3.2.3.1.其它知識點
?每次通信,消息包含兩部分,一部分可解碼,一部分不可解碼
?服務端不會直接有KDC通信。
?KDC保存所有機器的賬戶名和密碼
?KDC本身具有一個密碼
3.2.3.2.Kerberos會經過3次通信
我們這里已獲取服務器中的一張表(數據)的服務以為,為一個http服務。
3.2.4.第一次通信(你和驗證服務)
圖 1 第一次通信
如果想要獲取http服務,你首先要向KDC表名你自己的身份。這個過程可以在你的程序啟動時進行。Kerberos可以通過kinit獲取。介紹自己通過未加密的信息發送至KDC獲取Ticket Granting Ticket (TGT)。
一、信息包含
?你的用戶名/ID
?你的IP地址
?TGT的有效時間
Authentication Server收到你的請求后,會去數據庫中驗證,你是否存在。注意,僅僅是驗證是否存在,不會驗證對錯。
如果存在,Authentication Server會產生一個隨機的Session key(可以是一個64位的字符串)。這個key用于你和Ticket Granting Server (TGS)之間通信。
二、回送信息
Authentication Server同樣會發送兩部分信息給你,一部分信息為TGT,通過KDC自己的密碼進行加密,包含:
?你的name/ID
?TGS的name/ID
?時間戳
?你的IP地址
?TGS的生命周期
?TGS session key
另外一部分通過你的密碼進行加密,包含的信息有:
?TGS的name/ID
?時間戳
?生命周期
?TGS session key
如果你的密碼是正確的,你就能解密第二部分信息,獲取到TGS session key。如果,密碼不正確,無法解密,則認證失敗。第一部分信息TGT,你是無法解密的,但需要展示緩存起來。
3.2.5. 第二次通信(你和TGS)
圖 2 第二次通信
如果第一部分你已經成功,你已經擁有無法解密的TGT和一個TGS Session Key。
一、請求信息
A: 通過TGS Session Key加密的認證器部分:
?你的name/ID
?時間戳
B:明文傳輸部分
?請求的Http服務名(就是請求信息)
?HTTP Service的Ticket生命周期
C:TGT部分
Ticket Granting Server收到信息后,首先檢查數據庫中是否包含有你請求的Http服務名。如果無,直接返回錯誤信息。
如果存在,則通過KDC的密碼解密TGT,這個時候。我們就能獲取到TGS Session key。然后,通過TGS Session key去解密你傳輸的第一部分認證器,獲取到你的用戶名和時間戳。
TGS再進行驗證:
1.對比TGT中的用戶名與認證器中的用戶名
2.比較時間戳(網上有說認證器中的時間戳和TGT中的時間戳,個人覺得應該是認證器中的時間戳和系統的時間戳),不能超過一定范圍。
3.檢查是否過期
4.檢查IP地址是否一致
5.檢查認證器是否已在TGS緩存中(避免應答攻擊)
6.可以在這部分添加權限認證服務。
TGS隨機產生一個Http Service Session Key,同時準備Http Service Ticket(ST)
二、回答信息
A:通過Http服務的密碼進行加密的信息(ST)
?你的name/ID
?Http服務name/ID
?你的IP地址
?時間戳
?ST的生命周期
?Http Service Session Key
B:通過TGS Session Key加密的信息
?Http服務name/ID
?時間戳
?ST的生命周期
?Http Service Session Key
你收到信息后,通過TGS Session Key解密,獲取到了Http Service Session Key,但是你無法解密ST。
3.2.6.第三次通信(你和Http服務)
圖 3 第三次通信
在前面兩步成功后,以后每次獲取Http服務,在Ticket沒有過期,或者無更新的情況下,都可直接進行這一步。省略前面兩個步驟。
一、請求信息
A:通過Http Service Session Key,加密部分。
?你的name/ID
?時間戳
B:ST
Http服務端通過自己的密碼解壓ST(KDC是用Http服務的密碼加密的),這樣就能夠獲取到Http Service Session Key,解密第一部分。
服務器解密好ST后,進行檢查
1、對比ST中的用戶名(KDC給的)與認證器中的用戶名
2、比較時間戳(網上有說認證器中的時間錯和TGT中的時間錯,個人覺得應該是認證器中的時間戳和系統的時間戳),不能超過一定范圍
3、檢查是否過期
4、檢查IP地址是否一致
5、檢查認證器是否已在HTTP服務端的緩存中(避免應答攻擊)
二、應答信息
A:通過Http Service Session Key加密的信息。
?Http服務name/ID
?時間戳
你在通過緩存的Http Service Session Key解密這部分信息,然后驗證是否是你想要的服務器發送給你的信息。完成你的服務器的驗證。至此,整個過程全部完成。
總結
以上是生活随笔為你收集整理的Kerberos简介,概述,协议内容,3次通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大件车拉设备和几桶设备用溶液可以上高速吗
- 下一篇: kerberos安装配置、配置kerbe