active-directory - Kerberos 新用户凭证流
问题描述
我了解 Kerberos 的原理是允许在不安全的网络上的用户和服务之间进行身份验证。身份验证和票证授予服务生成的票证支持安全通信,并且不需要通过网络传输密码。
该流程依赖于与客户端 (c) 共享密钥的 KDC (s) 中的身份验证服务器。
但是,在某些时候,用户本身必须已经创建,通常,用户是从客户端计算机创建的(您通常不会登录域控制器来创建用户)
那么,如果密码/秘密从未通过网络发送,如何首先创建用户和密钥(Kac)并将其存储在 KDC 数据库中?
解决方案
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 环境。
推荐阅读
- treeview - 在树视图 odoo 10.0 中添加新字段时出错
- gcc - 当我使用 crosstool-4.3 构建自己的 crosstool 时出现问题
- java - 重启电脑后我的 Android Studio 项目无法运行
- java - 使用 for 循环和指定格式打印出字符串列表
- java - Android Studio 的新活动显示错误
- google-compute-engine - Google Compute Engine - 以什么货币定价?
- android - 领域 5.8.0:findAllSorted - 编译错误
- php - php preg_split 或爆炸。不删除字符
- scala - Spark TSV 文件和不正确的列吐出
- python - selenim web driver python repet code Ultimate