posts - 431,  comments - 344,  trackbacks - 0
          Kerberos協(xié)議:

          Kerberos協(xié)議主要用于計(jì)算機(jī)網(wǎng)絡(luò)的身份鑒別(Authentication), 其特點(diǎn)是用戶只需輸入一次身份驗(yàn)證信息就可以憑借此驗(yàn)證獲得的票據(jù)(ticket-granting ticket)訪問多個(gè)服務(wù),即SSO(Single Sign On)。由于在每個(gè)ClientService之間建立了共享密鑰,使得該協(xié)議具有相當(dāng)?shù)陌踩浴?br />
          條件

          先來看看Kerberos協(xié)議的前提條件:

          如下圖所示,ClientKDC KDCService 在協(xié)議工作前已經(jīng)有了各自的共享密鑰,并且由于協(xié)議中的消息無法穿透防火墻,這些條件就限制了Kerberos協(xié)議往往用于一個(gè)組織的內(nèi)部, 使其應(yīng)用場(chǎng)景不同于X.509 PKI

           

          過程

          Kerberos
          協(xié)議分為兩個(gè)部分:

          1 . ClientKDC發(fā)送自己的身份信息,KDCTicket Granting Service得到TGT(ticket-granting ticket) 并用協(xié)議開始前ClientKDC之間的密鑰將TGT加密回復(fù)給Client

          此時(shí)只有真正的Client才能利用它與KDC之間的密鑰將加密后的TGT解密,從而獲得TGT

          (此過程避免了Client直接向KDC發(fā)送密碼,以求通過驗(yàn)證的不安全方式)

          2. Client利用之前獲得的TGTKDC請(qǐng)求其他ServiceTicket,從而通過其他Service的身份鑒別。

           Kerberos協(xié)議的重點(diǎn)在于第二部分,簡(jiǎn)介如下:

           

          1.    Client將之前獲得TGT和要請(qǐng)求的服務(wù)信息(服務(wù)名等)發(fā)送給KDCKDC中的Ticket Granting Service將為ClientService之間生成一個(gè)Session Key用于Service對(duì)Client的身份鑒別。然后KDC將這個(gè)Session Key和用戶名,用戶地址(IP),服務(wù)名,有效期, 時(shí)間戳一起包裝成一個(gè)Ticket(這些信息最終用于Service對(duì)Client的身份鑒別)發(fā)送給Service 不過Kerberos協(xié)議并沒有直接將Ticket發(fā)送給Service,而是通過Client轉(zhuǎn)發(fā)給Service.所以有了第二步。

          2.    此時(shí)KDC將剛才的Ticket轉(zhuǎn)發(fā)Client。由于這個(gè)Ticket是要給Service的,不能讓Client看到,所以KDC用協(xié)議開始前KDCService之間的密鑰將Ticket加密后再發(fā)送給Client。同時(shí)為了讓ClientService之間共享那個(gè)秘密(KDC在第一步為它們創(chuàng)建的Session Key) KDCClient與它之間的密鑰將Session Key加密隨加密的Ticket一起返回給Client

          3.    為了完成Ticket的傳遞,Client將剛才收到的Ticket轉(zhuǎn)發(fā)到Service. 由于Client不知道KDCService之間的密鑰,所以它無法算改Ticket中的信息。同時(shí)Client將收到的Session Key解密出來,然后將自己的用戶名,用戶地址(IP)打包成AuthenticatorSession Key加密也發(fā)送給Service

          4.    Service 收到Ticket后利用它與KDC之間的密鑰將Ticket中的信息解密出來,從而獲得Session Key和用戶名,用戶地址(IP),服務(wù)名,有效期。然后再用Session KeyAuthenticator解密從而獲得用戶名,用戶地址(IP)將其與之前Ticket中解密出來的用戶名,用戶地址(IP)做比較從而驗(yàn)證Client的身份。

          5.    如果Service有返回結(jié)果,將其返回給Client

          總結(jié)

          概括起來說Kerberos協(xié)議主要做了兩件事

          1.    Ticket的安全傳遞。

          2.    Session Key的安全發(fā)布。

          再加上時(shí)間戳的使用就很大程度上的保證了用戶鑒別的安全性。并且利用Session Key,在通過鑒別之后ClientService之間傳遞的消息也可以獲得Confidentiality(機(jī)密性), Integrity(完整性)的保證。不過由于沒有使用非對(duì)稱密鑰自然也就無法具有抗否認(rèn)性,這也限制了它的應(yīng)用。不過相對(duì)而言它比X.509 PKI的身份鑒別方式實(shí)施起來要簡(jiǎn)單多了。

          推薦資料:

          Kerberos的原理

          Kerberos: An Authentication Service for Computer Networks

          Web Services Security系列文章 

          posted on 2008-09-08 14:23 周銳 閱讀(282) 評(píng)論(0)  編輯  收藏 所屬分類: JavaSpring
          主站蜘蛛池模板: 六安市| 武夷山市| 彩票| 凌源市| 靖安县| 多伦县| 河北省| 南投市| 同江市| 华宁县| 扎鲁特旗| 孝昌县| 昭平县| 天水市| 胶州市| 长沙县| 来凤县| 筠连县| 甘谷县| 石阡县| 平乐县| 绥江县| 平南县| 当涂县| 衡南县| 清流县| 兴隆县| 天全县| 九龙坡区| 瑞安市| 榕江县| 宝清县| 宣威市| 北票市| 姚安县| 介休市| 汝阳县| 彝良县| 葵青区| 崇仁县| 确山县|