文章目录

    • 概述
    • 核心概念
    • 认证流程
      • 阶段一: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…