隨筆-314  評論-209  文章-0  trackbacks-0

          1.  Kerberos簡介

          1.1. 功能

          1. 一個(gè)安全認(rèn)證協(xié)議

          2. 用tickets驗(yàn)證

          3. 避免本地保存密碼和在互聯(lián)網(wǎng)上傳輸密碼

          4. 包含一個(gè)可信任的第三方

          5. 使用對稱加密

          6. 客戶端與服務(wù)器(非KDC)之間能夠相互驗(yàn)證

          Kerberos只提供一種功能——在網(wǎng)絡(luò)上安全的完成用戶的身份驗(yàn)證。它并不提供授權(quán)功能或者審計(jì)功能。

          1.2. 概念

          首次請求,三次通信方

          • the Authentication Server
          • the Ticket Granting Server
          • the Service or host machine that you’re wanting access to.

           

          圖 1‑1 角色

          其他知識點(diǎn)

          • 每次通信,消息包含兩部分,一部分可解碼,一部分不可解碼
          • 服務(wù)端不會直接有KDC通信
          • KDC保存所有機(jī)器的賬戶名和密碼
          • KDC本身具有一個(gè)密碼

          2.  3次通信

           

            我們這里已獲取服務(wù)器中的一張表(數(shù)據(jù))的服務(wù)以為,為一個(gè)http服務(wù)。

          2.1. 你和驗(yàn)證服務(wù)

            如果想要獲取http服務(wù),你首先要向KDC表名你自己的身份。這個(gè)過程可以在你的程序啟動(dòng)時(shí)進(jìn)行。Kerberos可以通過kinit獲取。介紹自己通過未加密的信息發(fā)送至KDC獲取Ticket Granting Ticket (TGT)。

          (1)信息包含

          • 你的用戶名/ID
          • 你的IP地址
          • TGT的有效時(shí)間

            Authentication Server收到你的請求后,會去數(shù)據(jù)庫中驗(yàn)證,你是否存在。注意,僅僅是驗(yàn)證是否存在,不會驗(yàn)證對錯(cuò)。

            如果存在,Authentication Server會產(chǎn)生一個(gè)隨機(jī)的Session key(可以是一個(gè)64位的字符串)。這個(gè)key用于你和Ticket Granting Server (TGS)之間通信。

          (2)回送信息

            Authentication Server同樣會發(fā)送兩部分信息給你,一部分信息為TGT,通過KDC自己的密碼進(jìn)行加密,包含:

          • 你的name/ID
          • TGS的name/ID
          • 時(shí)間戳
          • 你的IP地址
          • TGT的生命周期
          • TGS session key

          另外一部分通過你的密碼進(jìn)行加密,包含的信息有

          • TGS的name/ID
          • 時(shí)間戳
          • 生命周期
          • TGS session key

           

          圖 2‑1 第一次通信

            如果你的密碼是正確的,你就能解密第二部分信息,獲取到TGS session key。如果,密碼不正確,無法解密,則認(rèn)證失敗。第一部分信息TGT,你是無法解密的,但需要展示緩存起來。

          2.2. 你和TGS

          如果第一部分你已經(jīng)成功,你已經(jīng)擁有無法解密的TGT和一個(gè)TGS Session Key。

          (1)    請求信息

           a)  通過TGS Session Key加密的認(rèn)證器部分:

          • 你的name/ID
          • 時(shí)間戳

          b)       明文傳輸部分:

          • 請求的Http服務(wù)名(就是請求信息)
          • HTTP Service的Ticket生命周期

          c)        TGT部分

            Ticket Granting Server收到信息后,首先檢查數(shù)據(jù)庫中是否包含有你請求的Http服務(wù)名。如果無,直接返回錯(cuò)誤信息。

            如果存在,則通過KDC的密碼解密TGT,這個(gè)時(shí)候。我們就能獲取到TGS Session key。然后,通過TGS Session key去解密你傳輸?shù)牡谝徊糠终J(rèn)證器,獲取到你的用戶名和時(shí)間戳。

          TGS再進(jìn)行驗(yàn)證:

          1. 對比TGT中的用戶名與認(rèn)證器中的用戶名
          2. 比較時(shí)間戳(網(wǎng)上有說認(rèn)證器中的時(shí)間錯(cuò)和TGT中的時(shí)間錯(cuò),個(gè)人覺得應(yīng)該是認(rèn)證器中的時(shí)間戳和系統(tǒng)的時(shí)間戳),不能超過一定范圍
          3. 檢查是否過期
          4. 檢查IP地址是否一致
          5. 檢查認(rèn)證器是否已在TGS緩存中(避免應(yīng)答攻擊)
          6. 可以在這部分添加權(quán)限認(rèn)證服務(wù)

            TGS隨機(jī)產(chǎn)生一個(gè)Http Service Session Key, 同時(shí)準(zhǔn)備Http Service Ticket(ST)。

          (2)    回答信息

            a)        通過Http服務(wù)的密碼進(jìn)行加密的信息(ST):

          • 你的name/ID
          • Http服務(wù)name/ID
          • 你的IP地址
          • 時(shí)間戳
          • ST的生命周期
          • Http Service Session Key

            b)       通過TGS Session Key加密的信息

          • Http服務(wù)name/ID
          • 時(shí)間戳
          • ST的生命周期
          • Http Service Session Key

            你收到信息后,通過TGS Session Key解密,獲取到了Http Service Session Key,但是你無法解密ST。

           

          圖 2‑2 第二次通信

          2.3. 你和Http服務(wù)

            在前面兩步成功后,以后每次獲取Http服務(wù),在Ticket沒有過期,或者無更新的情況下,都可直接進(jìn)行這一步。省略前面兩個(gè)步驟。

          (1)    請求信息

            a)        通過Http Service Session Key加密部分

          • 你的name/ID
          • 時(shí)間戳

            b)       ST

             Http服務(wù)端通過自己的密碼解壓ST(KDC是用Http服務(wù)的密碼加密的),這樣就能夠獲取到Http Service Session Key,解密第一部分。

          服務(wù)端解密好ST后,進(jìn)行檢查

          1. 對比ST中的用戶名(KDC給的)與認(rèn)證器中的用戶名
          2. 比較時(shí)間戳(網(wǎng)上有說認(rèn)證器中的時(shí)間錯(cuò)和TGT中的時(shí)間錯(cuò),個(gè)人覺得應(yīng)該是認(rèn)證器中的時(shí)間戳和系統(tǒng)的時(shí)間戳),不能超過一定范圍
          3. 檢查是否過期
          4. 檢查IP地址是否一致
          5. 檢查認(rèn)證器是否已在HTTP服務(wù)端的緩存中(避免應(yīng)答攻擊)

          (2)    應(yīng)答信息

          a)        通過Http Service Session Key加密的信息

          • Http服務(wù)name/ID
          • 時(shí)間戳

           

          圖 2‑3 第三次通信

            你在通過緩存的Http Service Session Key解密這部分信息,然后驗(yàn)證是否是你想要的服務(wù)器發(fā)送給你的信息。完成你的服務(wù)器的驗(yàn)證。

          至此,整個(gè)過程全部完成。

          posted on 2017-04-25 15:56 xzc 閱讀(264) 評論(2)  編輯  收藏 所屬分類: Javalinux/unixhadoop

          評論:
          # re: Kerberos簡介 2017-04-25 15:57 | xzc
          krb5kdc --認(rèn)證
          kadmin --管理賬戶  回復(fù)  更多評論
            
          # re: Kerberos簡介 2017-04-25 17:44 | xzc
          kerberos認(rèn)證過程(3次通信)
          1.次通信
          [客戶端] -> [明文]用戶ID -> [KDC](Authentication Server) -> [KDC密碼]TGT(TGS會話密碼)+[客戶端密碼]用戶ID/TGS會話密碼 -> [客戶端]
          2.次通信
          [客戶端] -> [TGS會話密碼]用戶ID+[明文]HTTP服務(wù)名+TGT(TGS會話密碼) ->[KDC](Ticket Granting Server) -> [服務(wù)端密碼]ST(服務(wù)會話密碼)+[TGS會話密碼]HTTP服務(wù)名/服務(wù)會話密碼 -> [客戶端]
          3.次通信
          [客戶端] -> [服務(wù)會話密碼]用戶ID+[服務(wù)端密碼]ST(服務(wù)會話密碼) -> [服務(wù)端] -> [服務(wù)會話密碼]HTTP服務(wù)名 -> [客戶端]
          注:客戶端:java代碼客戶端
          KDC:kerberos認(rèn)證服務(wù)器
          服務(wù)端:HTTP服務(wù)器  回復(fù)  更多評論
            
          主站蜘蛛池模板: 施甸县| 淳化县| 启东市| 深泽县| 江安县| 乌什县| 咸丰县| 许昌县| 博野县| 阳曲县| 花莲市| 绩溪县| 麟游县| 凌源市| 略阳县| 铁岭县| 定远县| 滦南县| 苏尼特右旗| 大荔县| 汾西县| 洪洞县| 右玉县| 临颍县| 东平县| 汕尾市| 宜黄县| 汨罗市| 克拉玛依市| 吴桥县| 镇赉县| 突泉县| 安图县| 介休市| 榆中县| 老河口市| 柳林县| 孟村| 长葛市| 富蕴县| 嘉荫县|