在 Windows 中创建与 kinit 一起使用的密钥表
Posted
技术标签:
【中文标题】在 Windows 中创建与 kinit 一起使用的密钥表【英文标题】:Creating a keytab to use with kinit in Windows 【发布时间】:2012-06-07 23:39:36 【问题描述】:我正在编写一个 pGina 插件,以便在登录时从我们的 KDC 获取 AFS 令牌和 Kerberos TGT,同时我注意到 kinit 的一个“功能”是它不会让您提供任何输入,除非它来自键盘,那里去了我只是重定向标准输入的想法......
有人建议为主体使用 keytab 文件,这似乎超级简单,直到我意识到我只在 linux 上使用了 kutil,并且在使用 Windows 版本的 ktpass.exe 时遇到了困难。我已经反复尝试使用大量参数组合来创建密钥表,但到目前为止绝对没有成功,我发出的当前命令是:
ktpass /out key.tab /mapuser user$@MERP.EDU /princ user.merp.edu@MERP.EDU /crypto RC4-HMAC-NT /ptype KRB5_NT_PRINCIPAL /pass mahpasswordlol /target MERP.EDU
不幸的是,所有这些输出都是
Using legacy password setting method
FAIL: ldap_bind_s failed: 0x31
根据我的研究,这是一个身份验证/加密问题,我已经尝试使用其他 DES 设置,但这似乎也不起作用......有人对这可能如何工作有任何经验/想法吗?
【问题讨论】:
DES 在 Windows 2008 R2 Active Directory 及更高版本中默认禁用。当你尝试它时,这可能是那个特定方面的问题。 【参考方案1】:ktpass.exe 确实很糟糕;我不使用它。相反,只需在 Unix 上使用 ktutil 使用密码独立创建匹配的 keytab,例如:
$ ktutil
ktutil: addent -password -p foo@BAR -k 1 -e aes128-cts-hmac-sha1-96
Password for foo@BAR:
ktutil: l
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
1 1 foo@BAR
ktutil: wkt /tmp/zz
$ klist -ek /tmp/zz
Keytab name: WRFILE:/tmp/zz
KVNO Principal
---- --------------------------------------------------------------------------
1 foo@BAR (aes128-cts-hmac-sha1-96)
LDAP 绑定错误表明 ktpass 无法向域控制器验证您的身份;发生这种情况时,您是否登录了域帐户?它必须是域帐户,而不是本地帐户(并且它必须被授权才能对 AD 进行必要的更改,尽管缺少这会导致权限错误而不是绑定)。
FWIW,我们对此采取了不同的方法:我们在 Unix 和 AD 领域之间使用跨领域信任。用户在登录时获得的 AD TGT 也足以获取 Unix 领域中服务的凭据;例如,我可以使用 PuTTY SSH 连接到 Unix 主机,使用 Firefox/Chrome/IE 对 Unix Web 服务 (Apache/mod_auth_kerb) 进行身份验证,等等。
【讨论】:
当您使用交叉信任时,您是否重叠了 UNIX 和 WINDOWS DNS 名称,或者您是否设置了一个子域来包含您的 UNIX 主机? 我们的重叠;也就是说,没有简单的规则可以区分两个领域的主机名。但是,如果可行,我建议为每个域使用不重叠的域,例如*.WIN.FOO.COM 和 *.UNIX.FOO.COM;我们的混合设置是我们现在无法更改的遗留基础设施的结果。为了确保所有票证请求都到达正确的位置,混合设置需要相当复杂的引荐和/或双方的静态域/领域配置形式。我最近在一个全新的部署中使用了不同的域,以避免所有这些。以上是关于在 Windows 中创建与 kinit 一起使用的密钥表的主要内容,如果未能解决你的问题,请参考以下文章