参考:

介绍

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

参与角色

  1. KDC : KDC(Key Distribution Center,密钥分发中心)是负责Kerberos协议的主要服务。该服务在域控制器服务器上运行。它包含 Active Directory 环境中所有客户端和服务帐户的信息和密钥(密钥是用户名&密码派生的 NTLM Hash 并经过哈希计算得到的)。这些密钥在 Kerberos 协议期间用作共享密钥
    1. Authentication Service (AS) : 它是密钥分发中心中负责认证步骤的模块。该模块通过检查客户端是否在Active Directory域(Domain)、提供的密码是否正确等信息来对客户端进行身份验证
    2. Ticket Granting Service (TGS): 该模块为经过身份验证的客户端提供必要票证的创建、验证和管理
    3. KRBTGT : 它是提供密钥分发中心服务管理的用户帐户。该用户的密码哈希用于加密某些票证(TGT)
  2. 客户端 : 发起认证以访问服务的对象, 可以是用户账号也可以是机器账号, 在 AD 中每个用户和计算机都有一个账号, 其中用户账号是使用用户名创建的, 而计算机账号是使用 计算机名+$ 表示的, 计算机账号和用户账号一样都有密码, 计算机账号密码每30天重新生成一次
  3. 应用程序 : 客户端想要访问的服务, 管理这些服务的用户、计算机对象也被称为服务账号
  4. Account Database : 存储所有客户端的白名单 , 只有存在于白名单的客户才能申请 TGT

扩展

首先在上面的介绍中我提到了一个 Account Database , 其中存储的内容为每个账户的 Hash 密钥, 并且为了索引方便每个人都有一个唯一的名字我们将其称为 principal , 对于 安全个体(principal) 定义如下:

对于上面的内容理解起来可能还是有些问题, 我们来看一个实际的文件

root@debian:/home/JTZDC/zhansan# klist -k /etc/krb5.keytab -teK
Keytab name: FILE:/etc/krb5.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   9 2023-11-26T12:21:31 restrictedkrbhost/[email protected] (aes256-cts-hmac-sha1-96)  (0xdf61662b900f879a8aa6816740a5747dc437e9cf56c4568c85e5933001a78f71)
   9 2023-11-26T12:21:31 restrictedkrbhost/[email protected] (aes256-cts-hmac-sha1-96)  (0xdf61662b900f879a8aa6816740a5747dc437e9cf56c4568c85e5933001a78f71)
   9 2023-11-26T12:21:31 restrictedkrbhost/[email protected] (aes128-cts-hmac-sha1-96)  (0x7aa07f0b338ce7846e16cc8fcd7ebf92)
   9 2023-11-26T12:21:31 restrictedkrbhost/[email protected] (aes128-cts-hmac-sha1-96)  (0x7aa07f0b338ce7846e16cc8fcd7ebf92)
   9 2023-11-26T12:21:31 restrictedkrbhost/[email protected] (DEPRECATED:arcfour-hmac)  (0xe6d23e0cc102c73d833471500d138d49)
   9 2023-11-26T12:21:31 restrictedkrbhost/[email protected] (DEPRECATED:arcfour-hmac)  (0xe6d23e0cc102c73d833471500d138d49)
   9 2023-11-26T12:21:31 host/[email protected] (aes256-cts-hmac-sha1-96)  (0xdf61662b900f879a8aa6816740a5747dc437e9cf56c4568c85e5933001a78f71)
   9 2023-11-26T12:21:31 host/[email protected] (aes256-cts-hmac-sha1-96)  (0xdf61662b900f879a8aa6816740a5747dc437e9cf56c4568c85e5933001a78f71)
   9 2023-11-26T12:21:31 host/[email protected] (aes128-cts-hmac-sha1-96)  (0x7aa07f0b338ce7846e16cc8fcd7ebf92)
   9 2023-11-26T12:21:31 host/[email protected] (aes128-cts-hmac-sha1-96)  (0x7aa07f0b338ce7846e16cc8fcd7ebf92)
   9 2023-11-26T12:21:31 host/[email protected] (DEPRECATED:arcfour-hmac)  (0xe6d23e0cc102c73d833471500d138d49)
   9 2023-11-26T12:21:31 host/[email protected] (DEPRECATED:arcfour-hmac)  (0xe6d23e0cc102c73d833471500d138d49)
   9 2023-11-26T12:21:31 [email protected] (aes256-cts-hmac-sha1-96)  (0xdf61662b900f879a8aa6816740a5747dc437e9cf56c4568c85e5933001a78f71)
   9 2023-11-26T12:21:31 [email protected] (aes128-cts-hmac-sha1-96)  (0x7aa07f0b338ce7846e16cc8fcd7ebf92)
   9 2023-11-26T12:21:31 [email protected] (DEPRECATED:arcfour-hmac)  (0xe6d23e0cc102c73d833471500d138d49)

内容解释 :

- 9 : 版本号, 用于跟踪密钥的更新历史
- 2023-11-26T12:21:31 : 时间戳, 用于表明创建时间
- restrictedkrbhost/[email protected] : 安全主体的名称
- aes256-cts-hmac-sha1-96 : 加密密钥的类型, 如果你自己查看过关于 Kerberos 的流量内容你或许知道这是什么, 但是具体的作用我还不知道
- 0xdf61662b900f879a8aa6816740a5747dc437e9cf56c4568c85e5933001a78f71 : 密钥的哈希值

9 2023-11-26T12:21:31 restrictedkrbhost/[email protected] (aes256-cts-hmac-sha1-96)  (0xdf61662b900f879a8aa6816740a5747dc437e9cf56c4568c85e5933001a78f71)

/etc/krb5.keytab 文件是 Kerberos 服务的关键组成部分,用于存储服务主体和密钥,提供服务的身份验证,生成安全通信的密钥,并支持自动密钥更新, 当然我们也可以将其理解为其就是存储我们的 principal 的文件,只不过这只是客户端的文件并不是服务端的文件, 其中每一行的内容都是一个 principal