佛山專業(yè)建站公司哪家好公眾號排名優(yōu)化軟件
簡介
Kerberos 是一種由 MIT(麻省理工大學(xué))提出的一種基于加密 Ticket 的身份認(rèn)證協(xié)議。它旨在通過使用密鑰加密技術(shù)為客戶端/服務(wù)器應(yīng)用程序提供強(qiáng)身份驗(yàn)證,用于驗(yàn)證用戶或主機(jī)的標(biāo)識。。
適用范圍:Windows Server 2022、Windows Server 2019、Windows Server 2016
在 Kerberos 協(xié)議中主要是有三個(gè)角色的存在:
1、訪問服務(wù)的 Client;
2、提供服務(wù)的 Server;
3、KDC(Key Distribution Center)密鑰分發(fā)中心(其中包含了The Authentication Server 和 The Ticket Granting Server)
- Key Distribution Center(即 KDC), 是 Kerberos 的核心組件,主要由三個(gè)部分組成:
- Kerberos Database: 包含了一個(gè) Realm 中所有的 principal、密碼與其他信息。(默認(rèn):Berkeley DB)
- Authentication Service(AS): 進(jìn)行用戶信息認(rèn)證,為客戶端提供 Ticket Granting Tickets(TGT)。
- Ticket Granting Service(TGS): 驗(yàn)證 TGT 與 Authenticator,為客戶端提供 Service Tickets
Kerberos認(rèn)證流程
簡化版
客戶端在訪問每個(gè)想要訪問的網(wǎng)絡(luò)服務(wù)時(shí),他需要攜帶一個(gè)專門用于訪問該服務(wù)并且能夠證明自己身份的票據(jù),當(dāng)服務(wù)端收到了該票據(jù)他才能認(rèn)定客戶端身份正確,向客戶端提供服務(wù)。所以整個(gè)認(rèn)證流程可簡化為兩大步:
- 客戶端向KDC請求獲取想要訪問的目標(biāo)服務(wù)的服務(wù)授予票據(jù)(Ticket);
- 客戶端拿著從KDC獲取的服務(wù)授予票據(jù)(Ticket)訪問相應(yīng)的網(wǎng)絡(luò)服務(wù);
詳細(xì)版
上面說到了簡化版的Kerberos認(rèn)證流程,大致的過程確實(shí)可以看作這兩步,但其中還存在一些問題:
- KDC怎么知道你(客戶端)就是真正的客戶端?憑什么給你發(fā)放服務(wù)授予票據(jù)(Ticket)呢?
- 服務(wù)端怎么知道你帶來的服務(wù)授予票據(jù)(Ticket)就是一張真正的票據(jù)呢?
所以這就需要詳細(xì)說一下Kerberos 詳細(xì)認(rèn)證流程了。所以整個(gè)Kerberos認(rèn)證流程可以細(xì)化為三個(gè)階段也可以理解為三次通信:
- Client 與 AS 的交互,
- Client 與 TGS 的交互,
- Client 與 Server 的交互。
第一次通信Client 與 AS 的交互
-
客戶端用戶向KDC以明文的方式發(fā)起請求。該次請求中攜帶了自己的用戶名,主機(jī)IP,和當(dāng)前時(shí)間戳;
-
KDC當(dāng)中的AS(Authentication Server)接收請求(AS是KDC中專門用來認(rèn)證客戶端身份的認(rèn)證服務(wù)器)后去kerberos認(rèn)證數(shù)據(jù)庫中根據(jù)用戶名查找是否存在該用戶,此時(shí)只會查找是否有相同用戶名的用戶,并不會判斷身份的可靠性;
-
如果沒有該用戶名,認(rèn)證失敗,服務(wù)結(jié)束;如果存在該用戶名,則AS認(rèn)證中心便認(rèn)為用戶存在,此時(shí)便會返回響應(yīng)給客戶端,其中包含兩部分內(nèi)容:
第一部分內(nèi)容稱為TGT,他叫做票據(jù)授予票據(jù),客戶端需要使用TGT去KDC中的TGS(票據(jù)授予中心)獲取訪問網(wǎng)絡(luò)服務(wù)所需的Ticket(服務(wù)授予票據(jù)),TGT中包含的內(nèi)容有kerberos數(shù)據(jù)庫中存在的該客戶端的Name,IP,當(dāng)前時(shí)間戳,客戶端
即將訪問的TGS的Name,TGT的有效時(shí)間以及一把用于客戶端和TGS間進(jìn)行通信的Session_key(CT_SK)。整個(gè)TGT使用TGS密鑰加密,客戶端是解密不了的,由于密鑰從沒有在網(wǎng)絡(luò)中傳輸過,所以也不存在密鑰被劫持破解的情況。第二部分內(nèi)容是使用客戶端密鑰加密的一段內(nèi)容,其中包括用于客戶端和TGS間通信的Session_key(CT_SK),客戶端即將訪問的TGS的Name以及TGT的有效時(shí)間,和一個(gè)當(dāng)前時(shí)間戳。該部分內(nèi)容使用客戶端密鑰加密,所以客戶端在拿到該部分內(nèi)容時(shí)可以通過自己的密鑰解密。如果是一個(gè)假的客戶端,那么他是不會擁有真正客戶端的密鑰的,因?yàn)樵撁荑€也從沒在網(wǎng)絡(luò)中進(jìn)行傳輸過。這也同時(shí)認(rèn)證了客戶端的身份,如果是假客戶端會由于解密失敗從而終端認(rèn)證流程。
至此,第一次通信完成。
第二次通信Client 與 TGS 的交互
客戶端行為:
- 客戶端使用CT_SK加密將自己的客戶端信息發(fā)送給KDC,其中包括客戶端名,IP,時(shí)間戳;
- 客戶端將自己想要訪問的Server服務(wù)以明文的方式發(fā)送給KDC;
- 客戶端將使用TGS密鑰加密的TGT也原封不動(dòng)的也攜帶給KDC;
TGS行為:
-
此時(shí)KDC中的TGS(票據(jù)授予服務(wù)器)收到了來自客戶端的請求。他首先根據(jù)客戶端明文傳輸過來的Server服務(wù)IP查看當(dāng)前kerberos系統(tǒng)中是否存在可以被用戶訪問的該服務(wù)。如果不存在,認(rèn)證失敗結(jié)束,。如果存在,繼續(xù)接下來的認(rèn)證。
-
TGS使用自己的密鑰將TGT中的內(nèi)容進(jìn)行解密,此時(shí)他看到了經(jīng)過AS認(rèn)證過后并記錄的用戶信息,一把Session_KEY即CT_SK,還有時(shí)間戳信息,他會現(xiàn)根據(jù)時(shí)間戳判斷此次通信是否真是可靠有無超出時(shí)延。
-
如果時(shí)延正常,則TGS會使用CK_SK對客戶端的第一部分內(nèi)容進(jìn)行解密(使用CT_SK加密的客戶端信息),取出其中的用戶信息和TGT中的用戶信息進(jìn)行比對,如果全部相同則認(rèn)為客戶端身份正確,方可繼續(xù)進(jìn)行下一步。
-
此時(shí)KDC將返回響應(yīng)給客戶端,響應(yīng)內(nèi)容包括:
第一部分:用于客戶端訪問網(wǎng)絡(luò)服務(wù)的使用Server密碼加密的ST(Servre Ticket),其中包括客戶端的Name,IP,需要訪問的網(wǎng)絡(luò)服務(wù)的地址Server IP,ST的有效時(shí)間,時(shí)間戳以及用于客戶端和服務(wù)端之間通信的CS_SK(Session Key)。
第二部分:使用CT_SK加密的內(nèi)容,其中包括CS_SK和時(shí)間戳,還有ST的有效時(shí)間。由于在第一次通信的過程中,AS已將CT_SK通過客戶端密碼加密交給了客戶端,且客戶端解密并緩存了CT_SK,所以該部分內(nèi)容在客戶端接收到時(shí)是可以自己解密的。
至此,第二次通信完成。
第三次通信 Client 與 Server 的交互
客戶端:
- 客戶端使用CK_SK將自己的主機(jī)信息和時(shí)間戳進(jìn)行加密作為交給服務(wù)端的第一部分內(nèi)容,然后將ST(服務(wù)授予票據(jù))作為第二部分內(nèi)容都發(fā)送給服務(wù)端。
服務(wù)端:
- 服務(wù)器此時(shí)收到了來自客戶端的請求,他會使用自己的密鑰,即Server密鑰將客戶端第二部分內(nèi)容進(jìn)行解密,核對時(shí)間戳之后將其中的CS_SK取出,使用CS_SK將客戶端發(fā)來的第一部分內(nèi)容進(jìn)行解密,從而獲得經(jīng)過TGS認(rèn)證過后的客戶端信息,此時(shí)他將這部分信息和客戶端第二部分內(nèi)容帶來的自己的信息進(jìn)行比對,最終確認(rèn)該客戶端就是經(jīng)過了KDC認(rèn)證的具有真實(shí)身份的客戶端,是他可以提供服務(wù)的客戶端。此時(shí)服務(wù)端返回一段使用CT_SK加密的表示接收請求的響應(yīng)給客戶端,在客戶端收到請求之后,使用緩存在本地的CS_ST解密之后也確定了服務(wù)端的身份(其實(shí)服務(wù)端在通信的過程中還會使用數(shù)字證書證明自己身份)。
至此,第三次通信完成。此時(shí)也代表著整個(gè)kerberos認(rèn)證的完成,通信的雙方都確認(rèn)了對方的身份,此時(shí)便可以放心的進(jìn)行整個(gè)網(wǎng)絡(luò)通信了。
linkes:https://seevae.github.io/2020/09/12/%E8%AF%A6%E8%A7%A3kerberos%E8%AE%A4%E8%AF%81%E6%B5%81%E7%A8%8B/