首页 > 解决方案 > Kerberos 新用户凭证流

问题描述

我了解 Kerberos 的原理是允许在不安全的网络上的用户和服务之间进行身份验证。身份验证和票证授予服务生成的票证支持安全通信,并且不需要通过网络传输密码。

该流程依赖于与客户端 (c) 共享密钥的 KDC (s) 中的身份验证服务器。

但是,在某些时候,用户本身必须已经创建,通常,用户是从客户端计算机创建的(您通常不会登录域控制器来创建用户)

那么,如果密码/秘密从未通过网络发送,如何首先创建用户和密钥(Kac)并将其存储在 KDC 数据库中?

标签: active-directorykerberosdomaincontroller

解决方案


KDC 数据库中的主体管理超出了正常 Kerberos 协议的范围。通常它使用一些辅助协议来完成,每个 KDC 都可以按照它想要的任何方式实现它。

例如,MIT Kerberos 有(基于 SunRPC 的)kadmin协议,kadmin客户端确实将管理员指定的实际密码发送到 KDC 上运行的 kadmind 服务。(当然,RPC 消息是使用 Kerberos 会话密钥加密的。) Heimdal 有自己的 kadmin 协议,大部分与 MIT 不兼容,但工作方式相同。

(两者都有“本地”版本的 kadmin 工具,它直接访问 KDC 数据库后端——这是创建初始管理员帐户的方式,通常通过在服务器控制台上运行 kadmin.local 或通过 SSH。)

Microsoft Active Directory 有几个用户管理协议,其中一些可以追溯到 AD 之前的日子,但主要机制是 LDAP(通常通过 GSSAPI/Kerberos 加密的会话,但偶尔使用 TLS 加密)。

要在 MS AD 中创建新帐户,管理员会创建一个带有纯文本“userPassword”属性的 LDAP“用户”或“计算机”条目,域控制器会自动将此属性转换为 Kerberos 密钥(而不是原始存储) . 常用的“AD 用户和计算机”小程序 (dsa.msc) 实际上是 LDAP 目录的接口。

所有上述实现还支持第二种管理协议,即kpasswd协议,其唯一目的是允许现有用户更改其密码。如您所料,它还可以通过网络传输用户的新密码,再次使用 Kerberos 身份验证和加密。(密码更改也可以通过 AD 的 LDAP 或 MIT/Heimdal 的 kadmin 来完成,但kpasswd的优势在于三者都支持。)


最后一点, PKINIT 扩展使用 X.509 证书来验证 AS-REQ——在这种情况下,客户端不知道自己的共享密钥,因此 KDC实际上通过网络(使用通过 DH 协商的会话密钥加密,有点像 TLS)。这主要用于具有“智能卡”身份验证的 Active Directory 环境。


推荐阅读