kerberos 協議初探

2022-07-25 09:06:09 字數 1970 閱讀 7928

乙個客戶端要訪問某個服務時,先要到kdc去認證自己,並獲得訪問票據tgt

然後客戶端再拿著這個訪問票據到自己真實想要訪問的服務去獲得訪問授權,

然後真實的進行訪問

在kerberos中,kdc有兩部分組成:

authentication server,用來認證使用者,即驗證使用者存在,且密碼正確

ticket-granting service,用來給客戶端生成,可以訪問客戶端想要訪問的那個服務的票據tgt

整體來看,kerberos分為三個請求來回,假設乙個client要訪問服務server

client到authentication server認證,並獲得跟ticket-granting service通訊的加密key,client/tgs sessionkey和能訪問client/tgs sessionkey的票據

client使用client/tgs sessionkey跟ticket-granting service進行安全通訊,獲得能訪問server票據

client在拿到第二步的票據去訪問服務server

kerberos是雙向驗證的。實現雙向驗證的原理:

其上三步通訊中,每一步的請求和返回都包含兩個資料。乙份是傳送方想要獲取認證的請求,乙份是傳送方希望接收方認證自己的請求資料。

principals

在kerberos網路中,認證雙方的指代,可以服務,也可以是個人

principals是唯一的,kdc是基於principals來判定它有沒有訪問某個服務的許可權

乙個principals的基本構造為:

primary/instance@realm

其中:以下是一些合法的principal定義

jdoe

jdoe/admin

jdoe/[email protected]

nfs/[email protected]

host/[email protected]

realms

realms 是kerberos整個網路的邏輯定義,相當於乙個域,所以通常也用網域名稱來定義。realm可以整合,也可以沒有整合但又有相應的關係

kdc儲存有所有principals的賬號資訊,用於認證使用者,並分發principal a訪問principal b的票據

kdc本身可以做主從,從而實現高可用

keytab

乙個儲存了principal資訊的檔案,其中包含使用者名稱跟加密key(相當於密碼)。其目的是,可以通過kinit命令,以指令碼的方式去kdc認證,並快取票據tgt。這樣做能夠使得一些系統之間的授權成為可能,也使得無人工參與的指令碼自動化認證成為可能。因為普通的登入認證,需要使用者互動,去輸入使用者名稱密碼。

乙個典型的kinit命令如下:

kinit [email protected] -k -t mykeytab; myscript
mykeytab是keytab的檔名,由於其中可能有多個principal的賬號資訊,所以這裡顯示的基於[email protected]這個使用者id,顯示的去找檔案中的密碼,完成認證。

認證完後,執行後續想要操作的myscript指令碼。

當日kinit命令本身也可以不使用keytab檔案,而直接使用者互動的方式,去輸入密碼,完整認證。

Kerberos認證協議

序言 近幾天學習了kerberos認證協議,覺得有必要把學習過程和學習心得記錄一下,文章內容有william stallings編著的 網路安全基礎 中的部分內容,也有自己的理解和思考。我希望能用自己的理解來解發布kerberos認證協議的工作過程。由於kerberos比較複雜,所以需要通過多個假設...

Kerberos認證協議

一 簡介 kerberos由mit於1988年開發,用於分布式環境中,完成伺服器與使用者之間的相互認證。設計者的設計初衷是要用kerberos的三個頭來守衛網路之門。三個頭分別包括 認證 賬目清算和審計。kerberos要解決的問題 在乙個開放的分布式網路環境中,使用者通過工作站訪問伺服器提供的服務...

Kerberos 協議簡介

kerberos 協議 kerberos 協議主要用於計算機網路的身份鑑別 authentication 其特點是使用者只需輸入一次身份驗證資訊就可以憑藉此驗證獲得的票據 ticket granting ticket 訪問多個服務,即 sso single sign on 由於在每個 client ...