跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言

Kerberos 认证协议详解与操作流程

Kerberos 协议是一种用于不可信网络上可信主机的身份验证协议,旨在解决开放网络中的安全通信问题。核心目标包括防止密码在网络传输、实现单点登录、支持双向认证及集中管理认证信息。主要组件包括领域、主体、票据、KDC(含 AS 和 TGS)、会话密钥及认证符。流程涉及 AS_REQ、AS_REP、TGS_REQ、TGS_REP 及 AP_REQ 等交互步骤。协议支持预认证、票据续期、转发及跨领域信任机制,广泛应用于企业级网络环境。

追风少年发布于 2025/2/4更新于 2026/7/2134 浏览
Kerberos 认证协议详解与操作流程

Kerberos 认证协议教程

1 引言

Kerberos 协议旨在为开放且不安全的网络提供可靠的身份验证,防止主机间通信被拦截。但需注意,如果计算机本身存在漏洞(如认证服务器、应用服务器或客户端未更新),Kerberos 无法提供保障。因此,Kerberos 是用于不可信网络上可信主机的身份验证协议。例如,若攻击者获取了包含密钥的文件并复制到另一台机器,仅通过伪造 DNS 或 IP 地址即可冒充服务器。

2 目标

Kerberos 协议旨在实现以下目标:

  • 用户密码绝不通过网络传输;
  • 用户密码绝不以任何形式存储在客户端机器上,使用后应立即丢弃;
  • 用户密码在认证服务器数据库中也不应以明文存储;
  • 每个工作会话只需输入一次密码,实现单点登录 (Single Sign-On);
  • 集中管理认证信息,应用服务器不存储用户认证信息,便于管理员统一禁用账户或修改密码;
  • 支持双向认证 (Mutual authentication),即应用服务器也需向客户端证明其身份;
  • 支持生成和交换加密密钥,建立加密连接。

3 组件与术语定义

3.1 领域 (Realm)

领域指认证管理域,确立认证服务器的权限边界。用户/服务属于某领域意味着与该领域的认证服务器共享秘密(密码/密钥)。域名区分大小写,通常全大写。建议将 Realm 名称设为 DNS 域名的大写形式,例如 EXAMPLE.COM。

3.2 主体 (Principal)

主体是认证服务器数据库中的条目名称。Kerberos 5 主体格式为:

component1/component2/.../componentN@REALM

实践中最多使用两个组件。

  • 用户主体:Name[/Instance]@REALM,例如 [email protected] 或 admin/[email protected]。
  • 服务主体:Service/Hostname@REALM,例如 imap/[email protected] 或 host/[email protected]。
  • 系统主体:如 krbtgt/REALM@REALM,用于加密票据授予票据 (TGT)。

3.3 票据 (Ticket)

票据由客户端提交给应用服务器以证明身份。由认证服务器签发,使用服务的密钥加密。内容包括:

  • 请求用户主体;
  • 目标服务主体;
  • 客户端 IP 地址列表(可选);
  • 时间戳;
  • 最大有效期;
  • 会话密钥。

票据通常有有效期(如 10 小时),以防止滥用。

3.4 加密

Kerberos 使用对称密钥加密。Kerberos 5 支持多种加密类型,需确保客户端与服务器至少有一种共同支持的加密类型。

3.4.1 加密类型

Kerberos 4 仅支持 DES-56,已废弃。Kerberos 5 支持 RC4-HMAC, 3DES, AES128, AES256 等。

3.4.2 加密密钥

使用 string2key 函数将明文密码转换为加密密钥,该函数不可逆。常用哈希算法包括 MD5 和 CRC32。

3.4.3 盐值 (Salt)

Kerberos 5 引入盐值概念,将主体名与密码拼接后再进行 string2key 处理。这确保了同一密码在不同主体下生成不同的密钥,提高了安全性。

3.4.4 密钥版本号 (kvno)

当密码或密钥更新时,计数器递增,当前值即为 kvno。

3.5 密钥分发中心 (KDC)

KDC 负责用户和服务的认证及票据分发,逻辑上分为三部分:

3.5.1 数据库

存储用户和服务条目,包含主体、密钥、kvno、票据有效期、属性标志等。数据库使用主密钥加密存储。

3.5.2 认证服务器 (AS)

处理初始认证请求,颁发票据授予票据 (TGT)。

3.5.3 票据授予服务器 (TGS)

分发服务票据给持有有效 TGT 的客户端。

3.6 会话密钥

由 KDC 生成,用于客户端与服务端之间的临时共享密钥。服务端密钥封装在票据中,用户密钥封装在加密包中。

3.7 认证符 (Authenticator)

客户端附加在请求中的数据包,包含用户主体和时间戳,使用会话密钥加密。服务器解密后验证时间戳差异(通常容忍 2 分钟)以确认身份。

3.8 重放缓存 (Replay Cache)

记录最近 2 分钟内收到的认证符,拒绝重复请求,防止重放攻击。

3.9 凭证缓存 (Credential Cache)

客户端存储票据和会话密钥的地方,实现单点登录。位置因实现而异(文件系统或内存)。

4 Kerberos 操作流程

应用服务器不与 KDC 直接通信,所有票据均通过客户端传递。

  • AS_REQ: 初始认证请求(如 kinit),发送给 AS。
  • AS_REP: AS 回复,包含 TGT(用 TGS 密钥加密)和会话密钥(用用户密钥加密)。
  • TGS_REQ: 客户端向 TGS 请求服务票据,包含 TGT 和认证符。
  • TGS_REP: TGS 回复,包含服务票据和新的会话密钥。
  • AP_REQ: 客户端向应用服务器发送请求,包含服务票据和认证符。
  • AP_REP: 应用服务器回复,证明自身身份(可选,用于双向认证)。

4.1 认证服务器请求 (AS_REQ)

客户端请求 TGT。请求内容:( PrincipalClient , PrincipalService , IP_list , Lifetime )。

4.2 认证服务器回复 (AS_REP)

AS 验证主体存在性,生成会话密钥 SKTGS,创建 TGT,并回复: AS_REP = { PrincipalService , Timestamp , Lifetime , SKTGS }KUser { TGT }KTGS

4.3 票据授予服务器请求 (TGS_REQ)

客户端构造认证符 { PrincipalClient , Timestamp }SKTGS,连同 TGT 发送给 TGS。

4.4 票据授予服务器回复 (TGS_REP)

TGS 验证 TGT 和认证符,生成服务会话密钥 SKService,创建服务票据 TService,回复: TGS_REP = { PrincipalService , Timestamp , Lifetime , SKService }SKTGS { TService }KService

4.5 应用请求 (AP_REQ)

客户端向应用服务器发送请求,包含服务票据和认证符 { PrincipalClient , Timestamp }SKService。

4.6 预认证 (Pre-Authentication)

为防止暴力破解,KDC 可要求预认证。客户端需在请求中包含用长期密钥加密的时间戳。默认情况下 MIT Kerberos 5 和 Heimdal 禁用此功能,而 Windows Active Directory 启用。

5 票据详解

5.1 初始票据

直接从 AS 获取的票据,如 TGT。可通过 kinit -S 命令强制获取特定服务的初始票据。

5.2 可续期票据

可在过期前重新提交给 KDC 续期,无需重新输入密码。设置 -r 参数指定最大续期时间。

5.3 可转发票据

允许将票据从一台机器转发到另一台机器,实现跨机登录而不需重新认证。

6 交叉认证

不同领域间的认证基于信任关系。

6.1 直接信任

两个 KDC 共享密钥,建立单向或双向信任。通过创建远程 TGT (krbtgt/B@A) 实现。

6.2 传递信任

若 A 信任 B,B 信任 C,则 A 自动信任 C。减少密钥数量,但需配置路径 (capaths)。

6.3 层次信任

基于 DNS 层级结构自动构建信任关系,管理员可强制配置路径。

目录

  1. Kerberos 认证协议教程
  2. 1 引言
  3. 2 目标
  4. 3 组件与术语定义
  5. 3.1 领域 (Realm)
  6. 3.2 主体 (Principal)
  7. 3.3 票据 (Ticket)
  8. 3.4 加密
  9. 3.4.1 加密类型
  10. 3.4.2 加密密钥
  11. 3.4.3 盐值 (Salt)
  12. 3.4.4 密钥版本号 (kvno)
  13. 3.5 密钥分发中心 (KDC)
  14. 3.5.1 数据库
  15. 3.5.2 认证服务器 (AS)
  16. 3.5.3 票据授予服务器 (TGS)
  17. 3.6 会话密钥
  18. 3.7 认证符 (Authenticator)
  19. 3.8 重放缓存 (Replay Cache)
  20. 3.9 凭证缓存 (Credential Cache)
  21. 4 Kerberos 操作流程
  22. 4.1 认证服务器请求 (AS_REQ)
  23. 4.2 认证服务器回复 (AS_REP)
  24. 4.3 票据授予服务器请求 (TGS_REQ)
  25. 4.4 票据授予服务器回复 (TGS_REP)
  26. 4.5 应用请求 (AP_REQ)
  27. 4.6 预认证 (Pre-Authentication)
  28. 5 票据详解
  29. 5.1 初始票据
  30. 5.2 可续期票据
  31. 5.3 可转发票据
  32. 6 交叉认证
  33. 6.1 直接信任
  34. 6.2 传递信任
  35. 6.3 层次信任
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • ProtonVPN iOS/Mac 应用项目结构及配置教程
  • CSS 基础:display 属性详解
  • Redis Hash 类型详解及相关指令介绍
  • VSCode Copilot MCP 配置与实战指南
  • C++ std::string 基础入门与常用操作
  • Java 常见面试题及答案汇总
  • GitHub 热门项目趋势:AI 智能体与跨平台工具崛起
  • 自省式 RAG 与 LangGraph:基于状态机的高效实践
  • Amazon SageMaker 部署 AIGC 应用:从训练到 Web 集成的实战
  • Java 后端实习复盘:企业级权限、缓存与并发实践
  • Linux du 命令详解:精准探查文件和目录的磁盘占用
  • PyTorch Grad-CAM 教程:生成高质量 AI 热力图
  • 链表算法专题:常用技巧与经典题目解析
  • Western Digital SSD Dashboard v4.2.2.5 离线版使用指南
  • VS Code 内置聊天与 GitHub Copilot Chat 区别及中文设置
  • Python 本地 AI 问答系统搭建与环境避坑指南
  • 黑客技术零基础入门学习指南
  • Kotlin 语言特性与常见陷阱测试题解析
  • Vue-SpringBoot 实现基于用户的协同过滤话题推荐
  • UniApp 微信小程序运动健身房预约打卡管理系统设计与实现

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online