Kerberos 認證協議解析

文章目錄

    • 概述
    • 核心概念
    • 認證流程
      • 階段一:Client -> AS,獲取 TGT
      • 階段二:Client -> TGS,獲取服務票據
      • 階段三:Client -> Server,請求服務
    • 核心安全機制
    • 優缺點分析
      • 優勢
      • 局限性
    • 實踐與排錯
      • 關鍵配置 (`krb5.conf`)
      • 常用命令
      • 常見錯誤與排查思路
    • 總結

概述

Kerberos 是一種基于對稱密鑰加密技術的網絡認證協議,專為 C/S 架構提供高強度的身份驗證。它由麻省理工學院(MIT)設計,其名字來源于希臘神話中的三頭犬 Cerberus,形象地代表了其認證模型中的三方:客戶端(Client)、服務端(Server)以及作為可信第三方的密鑰分發中心(KDC)。在 Kafka、Hadoop 等分布式系統中,Kerberos 是實現安全認證的主流方案。

核心概念

Kerberos 的世界由以下幾個核心角色構成:

  • KDC (Key Distribution Center): 密鑰分發中心,是整個認證體系的核心。它本身由兩個邏輯部分組成:

    • AS (Authentication Server): 認證服務,負責驗證 Client 的初始身份,并發放 TGT。
    • TGS (Ticket Granting Server): 票據授予服務,負責在 Client 持有 TGT 的前提下,發放用于訪問具體服務的票據。
  • Principal (主體): 任何參與認證的實體。每個 Principal 都有一個唯一的身份標識,例如 user/host@REALM。主要分為兩類:

    • 用戶主體: 需要訪問服務的用戶或客戶端。
    • 服務主體: 提供特定服務的應用或服務器,例如 kafka/kafka-broker-1.example.com@EXAMPLE.COM
  • Ticket (票據): KDC 頒發給客戶端的憑證,用于證明其身份。

    • TGT (Ticket Granting Ticket): “票據的票據”,客戶端從 AS 獲取,用于向 TGS 證明自己的身份,以換取訪問具體服務的票據。
    • Service Ticket: 服務票據,客戶端從 TGS 獲取,用于向最終的目標服務證明自己有權訪問。

認證流程

Kerberos 的認證過程可以看作是客戶端“過三關”的過程,最終目的是拿到可以和服務直接通信的“令牌”。
Kerberos 認證流程

階段一:Client -> AS,獲取 TGT

這是客戶端的“敲門”步驟,目的是向 KDC 證明“我是我”。

  1. 認證請求: 客戶端向 AS 發送一個包含自己 Principal 名稱的明文請求。請求中還包含一個用客戶端密碼的哈希值(即客戶端密鑰)加密的時間戳。注意:用戶的明文密碼永遠不會在網絡上傳輸。

  2. AS 驗證與響應:

    • AS 在其數據庫中查找該客戶端的密鑰。
    • 用該密鑰嘗試解密請求中的時間戳。如果成功,說明客戶端身份合法。
    • 驗證通過后,AS 返回兩樣東西:
      • TGT: 這張票據包含了客戶端信息、TGS 會話密鑰等,但它是用 TGS 的密鑰加密的。客戶端無法解開它,只能當個信物。
      • Client/TGS 會話密鑰: 這個密鑰是用客戶端自己的密鑰加密的。
  3. 客戶端解密: 客戶端收到響應后,用自己的密碼哈希解密,得到 Client/TGS 會話密鑰。至此,客戶端擁有了 TGT 和與 TGS 通信的會話密鑰。

階段二:Client -> TGS,獲取服務票據

客戶端拿著第一階段的成果,去向 TGS 申請訪問某個具體服務的“門票”。

  1. 服務票據請求: 客戶端向 TGS 發送請求,包含:

    • 第一階段獲取的 TGT。
    • 需要訪問的服務的 Principal 名稱。
    • 一個認證器 (Authenticator),包含客戶端信息和時間戳,用第一階段獲取的 Client/TGS 會話密鑰加密。
  2. TGS 驗證與響應:

    • TGS 用自己的密鑰解密 TGT,拿到里面的 Client/TGS 會話密鑰。
    • 用這個會話密鑰解密認證器,驗證客戶端身份和請求的有效性(防重放)。
    • 驗證通過后,TGS 返回兩樣東西:
      • 服務票據 (Service Ticket): 包含客戶端信息、新的會話密鑰等,但這次是用目標服務的密鑰加密的。客戶端同樣無法解開。
      • Client/Server 會話密鑰: 這個新密鑰是用 Client/TGS 會話密鑰加密的。
  3. 客戶端解密: 客戶端用第一階段的會話密鑰解密,得到用于和目標服務通信的 Client/Server 會話密鑰。

階段三:Client -> Server,請求服務

萬事俱備,客戶端現在可以拿著“門票”去找真正的服務了。

  1. 服務請求: 客戶端向目標服務發起請求,包含:

    • 第二階段獲取的服務票據。
    • 一個新的認證器,用第二階段獲取的 Client/Server 會話密鑰加密。
  2. 服務驗證與響應:

    • 目標服務用自己在 KDC 注冊的密鑰解密服務票據,拿到 Client/Server 會話密鑰。
    • 用這個會話密鑰解密認證器,驗證客戶端身份。
    • 驗證通過后,服務確認客戶端合法,開始提供服務。(可選)服務可以向客戶端回送一個響應,證明自己也是合法的,實現雙向認證。

核心安全機制

  • 密鑰隔離: 用戶的密碼哈希只用于和 AS 的初次交互。后續流程都使用臨時的會話密鑰,且每個會話密鑰都有特定的用途和生命周期,大大降低了密鑰泄露的風險。
  • 防重放攻擊: 認證器 (Authenticator) 中包含時間戳,且只能使用一次。服務會緩存近期收到的認證器信息,防止攻擊者截獲并重放請求。
  • 時間戳與時鐘同步: Kerberos 強依賴時間同步。如果客戶端和服務端的時鐘偏差過大(默認5分鐘),認證會失敗。這是防止票據被長時間持有和重放的關鍵機制,也是運維中常見的“坑”。

優缺點分析

優勢

  1. 強安全性: 密碼不經過網絡傳輸,認證過程基于加密票據,有效防止竊聽。
  2. 單點登錄 (SSO): 用戶只需登錄一次,就可以在 TGT 的生命周期內(如8小時)無縫訪問授權的多個服務。
  3. 雙向認證: 不僅客戶端要驗證服務端,服務端也要驗證客戶端,防止客戶端連接到偽造的服務。
  4. 互操作性: 作為廣泛應用的標準協議 (RFC 4120),可以集成各種系統。

局限性

  1. 單點故障 (SPOF): KDC 是認證核心,一旦宕機,整個認證體系都會癱瘓。因此生產環境必須部署高可用的 KDC 集群。
  2. 嚴格的時鐘同步: 對集群內所有節點的時鐘同步要求極高,是部署和維護時最需要注意的一點。
  3. 部署復雜: 相比簡單的用戶名/密碼認證,Kerberos 的部署和密鑰管理(keytab 文件)更復雜。
  4. 初始密鑰分發: 需要一個安全的方式來分發服務端的 keytab 文件。

實踐與排錯

關鍵配置 (krb5.conf)

# /etc/krb5.conf 示例
[libdefaults]default_realm = EXAMPLE.COM  # 默認的 Realmdns_lookup_realm = falsedns_lookup_kdc = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = true[realms]EXAMPLE.COM = {kdc = kdc-server.example.comadmin_server = kdc-server.example.com}[domain_realm].example.com = EXAMPLE.COMexample.com = EXAMPLE.COM

常用命令

# 申請 TGT (交互式輸入密碼)
kinit username@EXAMPLE.COM# 使用 keytab 文件為服務主體申請 TGT (非交互式)
kinit -kt /path/to/service.keytab service/hostname@EXAMPLE.COM# 查看當前緩存的票據
klist# 銷毀當前緩存的票據
kdestroy

常見錯誤與排查思路

  • Clock skew too great: 客戶端與 KDC 或目標服務的時鐘不同步。檢查所有節點的 ntp 服務。
  • Client not found in Kerberos database: 客戶端 Principal 不存在。檢查拼寫或是否已在 KDC 中創建。
  • Pre-authentication failed: 通常是密碼錯誤。
  • Ticket expired: 票據已過期。需要重新 kinit
  • GSSException: No valid credentials provided: 客戶端沒有可用的 TGT,或者 TGT 已過期。檢查 klist

總結

Kerberos 是一個強大而成熟的認證協議,通過“票據”機制在不信任的網絡環境中實現了安全的身份認證。雖然它的部署和維護有一定復雜度,并且對時鐘同步有嚴格要求,但其帶來的高安全性、單點登錄等特性,使其在企業級分布式系統(如 Kafka、Hadoop、Active Directory)中成為事實上的標準。理解其核心流程和概念,是保障這些系統安全穩定運行的關鍵。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87269.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87269.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87269.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【設計模式07】適配器

前言 實現目標,組合源,寫個適配方法,適用于沒辦法改變源,但又想實現目標類。我暫時還沒使用到過,但感覺用處還是蠻大的 UML類圖 代碼示例 package com.sw.learn.pattern.C_structre.a_adapter;public class Main {//…

SPI、I2C和UART三種串行通信協議的--------簡單總結

目錄 一、3種協議的對比二、典型應用場景三、選型建議 以下是SPI、I2C和UART三種串行通信協議的對比分析及適用場景總結: 一、3種協議的對比 . 對比其他接口 特性ICSPIUART信號線數量2(SCL SDA)4(SCK MOSI MISO SS/CS&…

VUE admin-element 后臺管理系統三級菜單實現緩存

VUE admin-element 后臺管理系統三級菜單實現緩存 框架無法直接實現三級菜單頁面緩存,原因是由于直接緩存時沒有把上級路由文件名稱緩存進去,所以在框架基礎上參考部分文章進行了一些改造 菜單文件,三級菜單引用文件路徑修改,在…

【筆記】Windows 安裝 Gemini CLI

2025 年 07 月 02 日 Windows 安裝 Gemini CLI google-gemini/gemini-cli:一個開源的 AI 代理,可將 Gemini 的強大功能直接引入您的終端。 一、前置條件 系統要求:Windows 7 及以上版本。 Node.js 環境:Gemini CLI 基于 Node.js …

transformers==4.42.0會有一個BUG

transformers4.42.0版本下,自動安裝模型時出現一個BUG(自動從Hugging Faces上下載)。 2025-07-02 14:07:08,641 - __main__ - ERROR - 模型加載失敗: Failed to import transformers.models.llama.tokenization_llama_fast because of the f…

Spring-解決IDEA中無法創建JDK17一下的SpringBoot項目

目錄 一.直接創建 二.修改Server URL為https://start.aliyun.com 一.直接創建 目前如果使用https://start.spring.io(Spring官方源),已經沒有辦法直接創建JDK17一下的項目了: 如果想要創建JDK8的項目,可以先通…

人工智能-基礎篇-13-基礎應用篇-2~~模型項目開發流程--從0到1創建類似DeepSeek語言模型,應該怎么做?

1、前期準備 1、明確目標與需求分析 應用場景定義:首先需要明確你的模型將用于哪些場景,比如對話系統、文本生成、代碼輔助等。性能指標設定:確定關鍵性能指標(KPI),如準確率、響應時間、支持的語言種類等。 2、組建團隊 機器…

本周滬鋁想法

核心邏輯:低庫存支撐與淡季需求疲軟博弈,宏觀情緒助推高位震蕩 一、成本下移 VS 價格韌性? 成本端與價格表現呈現出不同態勢。成本端方面,氧化鋁現貨價格在本周持續下跌,山東地區均價降至 3090 元 / 噸,環比下降 1.…

【網絡】SSL/TLS介紹

一、SSL/TLS 概述 SSL(Secure Socket Layer) : 最初由網景(Netscape)開發,用于在客戶端和服務器之間建立安全的加密連接,防止數據被竊取或篡改。后來逐步演進,最終被 TLS 取代。 TL…

TLF35584

13、SPI串行外設接口 13.1 介紹 主要功能 SPI 總線是?種以全雙工模式運行的同步串行數據鏈路。TLF35584 在從機模式下進行通信,其中主機(μC)啟動數據幀。TLF35584應該通過專用片選線進行尋址。這允許其他從設備連接到SPI總線。 數據傳輸 開始通信,μ…

word中如何保存高清圖片,并保存為高質量的pdf文件(圖像不失真)

word中如何保存高清圖片 打開word,選擇,選項,高級選項,選擇不壓縮文件中的圖像并保持分辨率高保真 將word保存為高質量的pdf文件 不用另存為或者導出 選擇文件,選擇打印: 選擇中間都打印出pdf即可。 然后再選擇打印…

Day03_C語言IO進程線程

01.思維導圖 02.創建一個進程扇 #include <25051head.h> int main(int argc, const char *argv[]) {pid_t pid;int i;for(i0;i<4;i){pidfork();if(pid0){//printf("子進程:pid[%d]\n",pid);printf("子進程%d:子進程pid[%d],父進程pid[%d]\n",i1,g…

獲取Qwen 2.5 內部網絡結構 講解

獲取Qwen 2.5 內部網絡結構 講解 Qwen2DecoderLayer( (self_attn): Qwen2Attention( (q_proj): Linear(in_features=2048, out_features=2048, bias=True) (k_proj): Linear(in_features=2048, out_features=256, bias=True) (v_proj): Linear(in_features=2048, out_features…

在深度學習中,batch、epoch 和 iteration 的關系

用一個實際例子和簡單代碼來清晰解釋 batch、epoch 和 iteration 的關系&#xff1a; ------------------------------------------------------------------------------------ 假設場景 你有一個數據集&#xff1a;1000 張貓狗圖片 你設置 batch_size 100&#xff08;每次…

RabbitMQ 高級特性之持久性

1. 簡介 在 RabbitMQ 的消息發送流程中&#xff0c;一共有三種消息丟失的情況&#xff1a; 生產者給 broker 發送的消息&#xff0c;broker 沒有收到broker 將消息丟失broker 給消費者發送消息時消息丟失 對于第一種情況&#xff0c;我們可以使用 RabbitMQ 提供的發布確認模…

應急響應靶機-近源OS-1-知攻善防實驗室

前景需要&#xff1a; 小王從某安全大廠被優化掉后&#xff0c;來到了某私立小學當起了計算機老師。某一天上課的時候&#xff0c;發現鼠標在自己動彈&#xff0c;又發現除了某臺電腦&#xff0c;其他電腦連不上網絡。感覺肯定有學生搗亂&#xff0c;于是開啟了應急。 1.攻擊…

Linux 內存管理與緩存機制

文章目錄 內存介紹buff/cache 與匿名頁Swap&#xff08;交換空間&#xff09;&#xff1a;內存的臨時倉庫 內存回收與Swap機制內存頁的兩種類型內核回收決策流程如何解讀內存狀態drop_caches 參數說明 實踐操作查看內存狀態查看Swap狀態釋放 buff/cache 緩存 內存介紹 當使用 …

【嵌入式電機控制#6】編碼器原理與內部構造

一、簡介 編碼器是一種將直線位移和角位移數據轉換為脈沖信號、二進制編碼的設備。常用于測量物體運動的位置、角度或速度。 二、分類 1. 按檢測分類&#xff1a; &#xff08;1&#xff09;光電式編碼器 &#xff08;2&#xff09;磁電式編碼器 2. 編碼類型分類&#xff1a; …

FastAPI 安裝使用教程

一、FastAPI 簡介 FastAPI 是一個現代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;基于 Python 3.7 和標準類型提示構建&#xff0c;廣泛應用于 API 服務開發。它使用 Pydantic 進行數據驗證&#xff0c;集成自動生成 OpenAPI 和文檔 UI&#xff0c;非常適合…

【WPF】WPF(樣式)

Window.Resources 當前窗體作用域資源 TargetType“Button” 使得當前窗體的組件類型都適配此樣式<Window.Resources><Style TargetType"Button"><Setter Property"Background" Value"WhiteSmoke"></Setter><Setter…