【网络安全】图解 Kerberos:身份认证

news2025/1/11 7:10:13

图解 Kerberos:身份认证

  • 1.什么是 Kerberos ?
  • 2.Kerberos 基本概念
    • 2.1 基本概念
    • 2.2 KDC
  • 3.Kerberos 原理
    • 3.1 客户端与 Authentication Service
    • 3.2 客户端与 Ticket Granting Service
    • 3.3 客户端与 HTTP Service

Kerberos 是一种身份认证协议,被广泛运用在大数据生态中,甚至可以说是大数据身份认证的事实标准。本文将详细说明 Kerberos 原理。

1.什么是 Kerberos ?

Kerberos 一词来源于古希腊神话中的 Cerberus —— 守护地狱之门的三头犬。下图是 Kerberos 的 LOGO。

在这里插入图片描述
一句话来说,Kerberos 是一种基于加密 Ticket 的身份认证协议。Kerberos 主要由三个部分组成:Key Distribution Center(KDC)ClientService。 大致关系如下图所示:

在这里插入图片描述
客户端会先访问两次 KDC,然后再访问目标 Service,如:HTTP 服务。

2.Kerberos 基本概念

2.1 基本概念

(1)Principal:大致可以认为是 Kerberos 世界的用户名,用于标识身份。Principal 主要由三部分构成:primaryinstance(可选)和 realm

  • 包含 instancePrincipal,一般会作为 Server 端的 Principal,如:NameNode,HiverServer2,Presto Coordinator 等。
  • 不含有 instancePrincipal,一般会作为 Client 端的 Principal,用于身份认证。

在这里插入图片描述
(2)Keytab:密码本。包含了多个 principal 与密码的文件,用户可以利用该文件进行身份认证。

(3)Ticket Cache:客户端与 KDC 交互完成后,包含身份认证信息的文件,短期有效,需要不断 renew

(4)Realm:Kerberos 系统中的一个 namespace。不同 Kerberos 环境,可以通过 realm 进行区分。

2.2 KDC

Key Distribution Center(KDC),是 Kerberos 的核心组件,主要由三个部分组成:

  • Kerberos Database:包含了一个 Realm 中所有的 Principal、密码与其他信息。(默认:Berkeley DB)
  • Authentication Service(AS):进行用户信息认证,为客户端提供 Ticket Granting TicketsTGT)。
  • Ticket Granting Service(TGS):验证 TGT 与 Authenticator,为客户端提供 Service Tickets

3.Kerberos 原理

在深入了解 Kerberos 原理之前,先介绍一下 Kerberos 协议的几个大前提,帮助大家理解:

  • Kerberos 基于 Ticket 实现身份认证,而非密码。如果客户端无法利用本地密钥,解密出 KDC 返回的加密 Ticket,认证将无法通过。
  • 客户端将依次与 Authentication Service,Ticket Granting Service 以及目标 Service 进行交互,共三次交互。
  • 客户端与其他组件交互都将获取到两条信息,其中一条可以通过本地密钥解密出,另外一条将无法解密出。
  • 户端想要访问的目标服务,将不会直接与 KDC 交互,而是通过能否正确解密出客户端的请求来进行认证。
  • KDC Database 包含有所有 Principal 对应的密码。
  • Kerberos 中信息加密方式一般是对称加密(可配置成非对称加密)。

下面,我们将以客户端访问 HTTP 服务为例,解释整个认证过程。

3.1 客户端与 Authentication Service

第一步,客户端通过 kinit USERNAME 或其他方式,将 客户端 ID目标 HTTP 服务 ID网络地址(可能是多个机器的 IP 地址列表,如果想在任何机器上使用,则可能为空),以及 TGT 有效期的寿命 等信息发送给 Authentication Service。

在这里插入图片描述
第二步,Authentication Server 将检查客户端 ID 是否在 KDC 数据库中。

在这里插入图片描述
如果 Authentication Server 检查操作没有异常,那么 KDC 将随机生成一个 Key,用于客户端与 Ticket Granting Service(TGS)通信。这个 Key,一般被称为 TGS Session Key。随后 Authentication Server 将发送 两条信息 给客户端。示意图如下:

在这里插入图片描述
其中一条信息被称为 TGT,由 TGS 的密钥加密,客户端无法解密,包含 客户端 IDTGS Session Key 等信息。

另一条信息由客户端密钥加密,客户端可以正常解密,包含 目标 HTTP 服务 IDTGS Session Key 等信息。

第三步,客户端利用本地的密钥解密出第二条信息。如果本地密钥无法解密出信息,那么认证失败。示意图如下:

在这里插入图片描述

3.2 客户端与 Ticket Granting Service

这时候,客户端有了 TGT(由于本地没有 TGS 的密钥,导致无法解密出其数据)与 TGS Session Key

第四步,客户端将:

  • 将 AS 发送过来的 TGT(由 TGS 密钥加密)转发给 TGS。
  • 将包含自身信息的 Authenticator (由 TGS Session Key 加密)发送给 TGS。

在这里插入图片描述
第五步,TGS 将利用自身的密钥从 TGT 中解密出 TGS Session Key,然后利用 TGS Session Key 从 Authenticator 中解密出客户端的信息。

在这里插入图片描述
TGS 解密出所有信息后,将进行身份检查,进行认证:

  • 将客户端 ID 与 TGT 的客户端 ID 进行比较。
  • 比较来自 Authenticator 的时间戳和 TGT 的时间戳(典型的 Kerberos 系统的容忍度是 2 2 2 分钟,但也可以另行配置)。
  • 检查 TGT 是否过期。
  • 检查 Authenticator 是否已经在 TGS 的缓存中(为了避免重放攻击)。

当所有检查都通过后, TGS 随机生成一个 Key 用于后续客户端与 HTTP 服务交互时进行通信加密使用,即 HTTP Session Key。同样地,TGS 将发送 两条信息 给客户端:其中一条是 HTTP Ticket,由 HTTP 服务的密钥进行加密;另一条则由 TGS Session Key 加密,包含了客户端信息与时间戳。

在这里插入图片描述
第六步,客户端将利用 TGS Session Key 解密出其中一条信息,另一条信息由于是由目标 HTTP 服务加密,无法解密。

在这里插入图片描述

3.3 客户端与 HTTP Service

这时候,客户端有了 HTTP Ticket(由于本地没有 HTTP 服务的密钥,导致无法解密出其数据)与 HTTP Service Session Key

第七步,客户端将:

  • 将 TGS 发送过来的 HTTP Ticket(由 HTTP 密钥加密)转发给目标 HTTP 服务。
  • 将包含自身信息的 Authenticator(由 HTTP Service Session Key 加密)发送给 HTTP 服务。

在这里插入图片描述
:上图中 Ticket for HTTP Service 中装的应该是 HTTP Service Session Key,而不是 TGS Session Key,有一点小错误,注意甄别。

第八步,HTTP 服务首先利用自身的密钥解密出 HTTP Ticket 的信息,得到 HTTP Service Session Key;随后,利用 HTTP Service Session Key 解密出用户的 Authenticator 信息。

在这里插入图片描述

信息解密完成后,HTTP 服务同样需要做一些信息检查:

  • 将 Authenticator 中的客户端 ID 与 HTTP Ticket 中的客户端 ID 进行比较。
  • 比较来自 Authenticator 的时间戳和 HTTP Ticket 的时间戳(典型的 Kerberos 系统对差异的容忍度是 2 2 2 分钟,但也可以另行配置)。
  • 检查 Ticket 是否过期。
  • 检查 Authenticator 是否已经在 HTTP 服务器的缓存中(为了避免重放攻击)。

然后,HTTP 服务会发送包含其 ID 和时间戳的身份验证器消息,以便向您确认其身份,并使用 HTTP Service Session Key 进行加密。

在这里插入图片描述
您的机器通过使用缓存的 HTTP Service Session Key 解密来读取身份验证器消息,并知道它必须接收带有 HTTP 服务 ID 和时间戳的消息。

在这里插入图片描述
现在,您已通过身份验证,可以使用 HTTP 服务。未来的请求将使用缓存的 HTTP Service Ticket,只要它没有按照生命周期属性中的定义过期即可。

在这里插入图片描述


参考如下:

  • Explain like I’m 5: Kerberos
  • Introduction To Kerberos
  • 一文搞定 Kerberos

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/981716.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【进阶篇】MySQL的MVCC实现机制详解

文章目录 0.前言1.基础介绍1.1. 什么是MVCC?1.1. 什么是当前读和快照读?1.1. 当前读,快照读和MVCC的关系1.1. MVCC能解决什么问题,好处是?1.1.1. 提高并发性能1.1.2. 避免死锁1.1.3. 解决脏读、不可重复读和幻读等问题1.1.4. 实现…

Python实现SSA智能麻雀搜索算法优化XGBoost分类模型(XGBClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法,在2020年提出&a…

CATIA Composer软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 CATIA(Computer-Aided Three-dimensional Interactive Application)是一款由法国达索系统公司开发的三维计算机辅助设计(CAD)软件。它是一种全面的产品开发解决方案,广泛…

linux安装wget命令_linux下载文件到本地命令

1、检查是否有安装wget rpm -qa|grep "wget" 复制 在这里插入图片描述 若存在则移除,以下为移除命令 # 移除wget yum remove wget 复制 2、登录wget官网下载地址,下载最新的wget的rpm安装包到本地 下载地址:http://mirrors.…

Android Jetpack Compose 用计时器demo理解Compose UI 更新的关键-------状态管理(State)

目录 概述1.什么是状态2.什么是单向数据流3.理解Stateless和Stateful4.使用Compose实现一个计数器4.1 实现计数器4.2 增加组件复用性-----状态上提 总结 概述 我们都知道了Compose使用了声明式的开发范式,在这样的范式中,UI的职责更加的单一&#xff0c…

行业追踪,2023-09-06

自动复盘 2023-09-06 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

Informatica使用工作流程及案例1

操作流程 ①定义源 ②定义目标 ③创建映射 ④定义任务 ⑤创建工作流 ⑥工作流调度监控 ⑦查验数据 连接D,并定义源、连接源 D:定义目标 通过源定义目标 D:定义好的目标表的表结构生成到目标数据库EDW层 D:创建映射 W:定义任务 W:执行工作流…

第3章 【MySQL】字符集和比较规则

3.1 字符集和比较规则简介 3.1.1 字符集简介 如何存储字符串?需要建立字符与二进制数据的映射关系。建立这个关系需要: 1.把哪些字符映射成二进制数据? 2.怎么映射? 将一个字符映射成一个二进制数据的过程也叫做 编码 &#…

【CI/CD】Rancher CD过程--20230906

gitlab设定CICD的变量 HARBOR_PASSWORD:密码HARBOR_USER:工号K8S_TOKEN:Bearer rancher key K8S_WORKLOAD_URL:选择【View in API】的URL,并非workload的URL。 准备json.txt 选择workload,进入【View i…

用户案例 | 蜀海供应链基于 Apache DolphinScheduler 的数据表血缘探索与跨大版本升级经验

导读 蜀海供应链是集销售、研发、采购、生产、品保、仓储、运输、信息、金融为一体的餐饮供应链服务企业。2021年初,蜀海信息技术中心大数据技术研发团队开始测试用DolphinScheduler作为数据中台和各业务产品项目的任务调度系统工具。本文主要分享了蜀海供应链在海…

Linux——(第五章)用户管理

目录 一、概述 二、基本操作 1.添加用户 2.指定/修改密码 3.删除用户 4.查询用户信息 5.切换用户 6.查看创建了那些用户 7.查看登录用户信息 8.设置普通用户具有root权限 9.用户组 10.修改组 11.用户和组的相关文件 一、概述 Linux系统是一个多用户多任务的操作系…

Ubuntu下QT操作Mysql数据库

本篇总结一下一下Ubuntu下QT操作Mysql数据库。 目录 1. 启动Mysql数据库服务器 2.查看QT支持的数据库驱动 3.连接数据库 4. 增加表和记录 5. 删除记录 6. 修改记录 7. 查询记录 8.完整代码和运行效果 常见错误总结: (1) 数据库服务没启动报错信息 (2) 有…

Java实现WebSocket客户端和服务端(简单版)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

自动驾驶(apollo)

💓博主csdn个人主页:小小unicorn 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 自动驾驶技术 引言自动驾驶的基本原理自动驾驶的技术挑战自动驾驶的潜在影响结…

[BSidesCF 2019]Futurella 1

外星语? 看到这个,我第一时间就是想复制百度一下看是不是什么新编码 结果… 你会发现你粘贴的时候出现的是英文,里面还带着flag 破案 查看源代码 发现根本就没有什么外星语,可能就是style.css在作祟 完整复制内容 Resistanc…

蓝牙协议栈BLE

前言 这阵子用到蓝牙比较多,想写一个专栏专门讲解蓝牙协议及其应用,本篇是第一篇文章,讲解低功耗蓝牙和蓝牙协议栈。 参考网上各大神文章,及瑞萨的文章,参考GPT,并且加入了一些本人的理解。 图片部分源自…

国内的几款强大的智能—AI语言模型

1、Tomchat :Tomchat https://www.tomchat.uk 支持gp4 支持 midjourny绘画 AI绘画功能:点我 介绍 1、4聊天 2、AI绘画 3、头像制作 1、国内百度研发的,文心一言: https://yiyan.baidu.com/welcome 大家如果像我的界面一样有【…

基于SSM的校园驿站管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Nebula数据库安装

1、什么是nebula NebulaGraph是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。 2、利用docker-compose安装Nebula数据库 1、前提条件 主机中安装了docker主机中安装了Docke…

opencv旋转图像

0 、使用旋转矩阵旋转 import cv2img cv2.imread(img.jpg, 1) (h, w) img.shape[:2] # 获取图像的宽和高# 定义旋转中心坐标 center (w / 2, h / 2)# 定义旋转角度 angle 90# 定义缩放比例 scale 1# 获得旋转矩阵 M cv2.getRotationMatrix2D(center, angle, scale)# 进行…