关键词

  • Kerberos认证
  • 域控制器(Domain Controller,DC)
  • 密钥分发中心(Key Distribution Center,KDC)
  • 帐户数据库(Account Database,AD)
  • 身份验证服务(Authentication Service,AS)
  • 入场卷[认证票据](Ticket Granting Ticket,TGT)
  • 票据发放服务(Ticket Granting Service,TGS)
  • 票据(Ticket)
  • Master Key / Long-term Key |长期密钥(被 Hash加密的用户密钥)
  • Session Key / Short-term Key | 短期会话密钥
  • krbtgt 账户

关键词/名称含义

  • Account Database:类似于 SAM的数据库,存储所有 Client的白名单,只有处于白名单中的 Client才可以成功申请 TGT
  • Authentication Service:为 Client生成 TGT的服务
  • Ticket Granting Ticket:入场券,通过入场券能够获得票据,是一种临时凭证的存在
  • Ticket Granting Service:为 Client生成某个服务的票据
  • Ticket:票据,网络对象互相访问的凭证
  • Master Key:长期密钥。将本机密码进行 Hash运算(NTML)得到一个Hash Code, 我们一般管这样的 Hash Code叫做 Master Key
  • Session Key:短期会话密钥。一种只在一段时间内有效的 Key
  • krbtgt账户:每个域控制器都有一个 krbtgt的用户账户,是 KDC的服务账户,用来创建票据授予服务(TGS)加密的密钥

域认证体系 Kerberos认证含义

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为 客户机 / 服务器应用程序 提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。
在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。——度娘百科

Kerberos认证的三只狗头(脑补地狱三头犬):

  • Client
  • Server
  • DC(KDC)。在 Windows域环境中,KDC的角色由 DC(Domain Controller)来担当

Kerberos大致流程:

  • Client 携带账户信息向 KDC上的 AS服务发送想要访问 Server A的请求,索要入场卷( TGT);AS通过 AD验证 Client账户的访问权,成功后返回 TGT
  • Client 携带 TGT请求 KDC中的 TGS服务想要访问 Server A,索要票据(Ticket);TGS验证 Client的 TGT,具有 Server A的访问权,返回 Ticket
  • Client 携带 Ticket与服务器进行相互验证且成功,可以访问 Server A,但无权访问其他服务器
基本认证流程图

认证流程三步走:

一、Client 与 AS

第一步 AS 实现对 Client 身份的确认,并颁发给该 Client 一个 TGT

首先,Client发送一个携带被自身 Master Key加密的身份信息 AS Request到 KDC,KDC验证用户名是否存在于 AD中(KDC 可以通 AD中对应用户名提取该 Client 的 Master Key)

  1. AS Request大致内容
  • Pre-authentication data:被 Client 的 Master Key加密过的 TimestampTimestamp防爆破)。时间同步(Time Synchronization)显得尤为重要
  • Client name & realm:Domain nameClient name (Client info)
  • Server Name:KDC中 TGS 的 Server Name

AS 需要验证发送方 Client info 是否为本人(Client的密码对否),所以 AS 只需从 AD中提取 Client对应的 Master Key 对 Pre-authentication data 进行解密,如果是一个合法的 Timestamp(时间差距合理),则可以证明发送方提供的用户名是存在于白名单中且密码对应正确的

验证成功后,返回给 Client一个 AS Response,主要包含两个部分:请求 Client 的 Master Key加密过的 TGS Session Key 和被 KDC(krbtgt 帐户)加密的TGT (客户端无法解密 TGT,因为它没有 KDC Hash

  1. TGT大致内容
  • Session Key : 第一部分的 TGS Session Key (这里的Session Key是被KDC加密,不是 Client)
  • Client name & realm : Domain nameClient (Client info)
  • End time : TGT到期的时间

KDC此时生成一个 Session Key,使用 Client用户名对应的 Master Key加密 Session Key,作为 AS数据(第一部分,用于后续与 TGS通讯);使用 KDC中 krbtgt 帐户Master Key 加密 Session Key 和 Client info,生成TGT(第二部分)

Client 通过自己的 Master Key对第一部分解密获得 TGS Session Key后,携带 TGT进入第二步

第一步

二、Client 与 TGS

第二步 实现 TGS 对 Client 身份(TGT)的确认,并分发给该 Client 一个 Ticket

Client 使用 AS返回的 TGS Session Key 建立访问 KDC中 TGS服务的请求(TGS Request),再将 TGT 连同请求一起发送到 TGS 服务

  1. TGS Request大致内容:
  • Authenticator:(Client info + timestamp)通过 TGS Session Key加密
  • TGT :(TGS Session Key + Client info + End Time)
  • Client info :Domain name/ Client
  • Server info :Client试图访问的 Server
  • 时间戳

TGS收到 TGS Request后需要验证 TGTAuthenticator;因为 AuthenticatorTGS Session Key 加密,TGS服务并没有保存这个 Session Key ;于是使用 TGS 自己的 Master Key 解密 TGT 获得其中的 TGS Session Key ,进而解密 Authenticator ,验证客户端是否受信

验证成功后,TGS 返回一个 TGS Response ,包含两个消息:加密的 Ticket 和加密的 Session Key

  1. TGS Response 大致内容:
  • 使用 Server 的 Master Key 进行加密的 Ticket
  • 通过 TGS Session Key 加密的 Server Session Key (将来 Client与 Server Service的通信使用)
  1. Ticket 大致内容:
  • Server Session Key
  • Client info
  • End time: Ticket的到期时间

Client收到 TGS Response后,使用 TGS Session Key 解密 Server Session Key,得到 Session Key后,进入第三步

第二步

三、Client 和 Server

第三步,Client 携带 Server Session Key 和 Ticket访问服务器,验证成功后,可以访问 Server资源

Client 通过第二步获的 Server 的 Session Key ,创建用于证明自己就是 Ticket 的真正所有者的 Authenticator 和时间戳,并使用 Server的 Session Key 进行加密

向服务器请求后,服务器用自己的 Master Key 解密 Ticket ,得到 Server Session Key,使用 Server Session Key 解密 Authenticator 进行验证,同上一步一样

验证成功后返回给 Client 新时间戳,使用 Server Session Key 加密

Client 通过缓存中的 Server Session Key 解密服务器返回信息,得到新时间戳并验证其是否正确。验证通过的话则客户端可以信赖服务器,并向服务器发送服务请求,服务器向客户端提供相应的服务

校验通过后,认证成功,该票据会一直存在客户端内存中

第三步

Ref

  • windows 域认证 Kerberos详解
  • 彻底理解Windows认证 - 议题解读
  • kerberos认证原理---讲的非常细致,易懂
  • Kerberos

kerberos认证_初识 Windows域认证体系 Kerberos认证相关推荐

  1. liunx 加入域控_让Linux使用Windows域控制器做用户认证

    最近为了做一个客户的问题需要搭一套Windows AD给Linux通过winbind做认证使得Windows AD用户可以登陆Linux机器的环境.因为头一次做这样的配置,所以颇费了一番周折.下面就记 ...

  2. python子进程进行kinit认证_使用kafka-python客户端进行kafka kerberos认证

    之前说过python confluent kafka客户端做kerberos认证的过程,如果使用kafka python客户端的话同样也可以进行kerberos的认证,具体的认证机制这里不再描述,主要 ...

  3. vsftp服务器mysql认证_基于mysql控制vsftp的用户认证机制

    一.简介 vsftpd 是"very secure FTP daemon"的缩写,安全性是它的一个最大的特点.vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以 ...

  4. 哪里有mysql认证_国内哪个城市可以考mysql认证

    学习完成该课程,你将能够: - 设计优化策略 - 具备有关MySQL架构的知识 - 获得使用诊断工具的知识和能力 - 获得使用优化工具的知识和能力 - 使用INFORMATION_SCHEMA数据库编 ...

  5. 浅析Windows域环境身份认证与攻击思路

    文章目录 前言 Kerberos协议 第1步-AS认证获取TGT 第2步-TGS认证获取ST 第3步-服务端服务认证 NTLM 认证 本地认证模式 网络认证模式 内网横向渗透 哈希凭证窃取 内网远程连 ...

  6. Windows域认证机制

    文章目录 Windows认证机制 Windows认证基础 本地认证 网络认证 hashcat破解net-ntlm hash 域认证 Kerberos认证协议的基础概念 Kerbreros认证流程 1. ...

  7. 【逗老师带你学IT】Windows Server NPS服务构建基于AD域控的radius认证

    目录 一.Windows Server Network Policy Service(NPS)安装 1.添加角色和功能 2.安装网络策略和访问服务 二.Windows NPS配置 1.NPS服务器加域 ...

  8. C#开发中Windows域认证登录2(扩展吉日嘎拉GPM系统)

    为什么80%的码农都做不了架构师?>>>    原文地址:http://www.cuiwenyuan.com/shanghai/post/Windows-AD-Logon-Inter ...

  9. liunx 加入域控_[整理篇]linux加入windows域之完美方案

    笔者这几天在研究samba服务通过ad域进行用户验证.在查资料的过程中发现.关于linux加入windows域,网上资料不少,但是按着网上的说法做大多不成功,甚至很多人估计都不知道自己在说什么,最后一 ...

最新文章

  1. c++ winpcap开发(2)
  2. SQL Server将表数据从一个数据源复制到另一个数据源(未完成)
  3. 【LDC1314】电感传感器中文手册与检测原理介绍
  4. (转)解决office软件无法卸载也无法安装的顽固问题
  5. 通信原理第三章:窄带随机过程
  6. 暂缓上市的云知声,技术究竟几何?
  7. 数据结构与算法面试题
  8. UDIMM、RDIMM和LRDIMM
  9. python股票接口_在Python中使用股票接口
  10. 【笔记整理】通信原理第七章复习——数字信号的最佳接受
  11. 解决win10蓝牙搜索到小爱音箱无法连接问题
  12. U3D游戏开发框架(四)——音频管理器
  13. Github上8个很棒的React项目
  14. 如何修改图片的dpi?教你一招快速修改照片dpi的方法
  15. python 结合百度识图识别文字
  16. 感谢!《夜空守望者》
  17. js将数字金额转换为大写人民币
  18. 宝塔安装nextcloud
  19. 连体形和连用形的区别?
  20. 爬取高德地图全国poi的爬虫

热门文章

  1. 科大星云诗社动态20210909
  2. 深入探讨!Batch 大小对训练的影响
  3. c++ 读文件_Linux文件(文件夹)详解
  4. ##(两个井号)和#(一个井号)都是什么意思C and C++ 2008-09-23 21:18:27 阅读1106 评论0 字号:大中小 订阅 .
  5. 【CyberSecurityLearning 37】网络安全常用Linux系统命令以及 源码包的安装过程
  6. table { border-collapse:collapse; }
  7. 浅谈malloc,calloc,realloc函数之间的区别
  8. C语言中size_t的陷阱
  9. idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总
  10. Redisson--------基础入门