linux - Windows AD 及其密钥选项卡文件
问题描述
我只有一个简单的问题。我有 Windows 活动目录。我已经使用命令从它创建了密钥选项卡文件:
ktpass /princ host/User1.contoso.com@CONTOSO.COM /mapuser User1 /pass MyPas$w0rd /out machine.keytab /crypto all /ptype KRB5_NT_PRINCIPAL /mapop set
现在根据我的理解,该文件由用户名及其加密格式的密码组成。当我将尝试使用此密钥表文件进行身份验证时,请求仅由该文件提供服务,或者这将进一步与 Windows AD 通信以进行身份验证。
我问的原因是因为我正在超时,并且我正在朝那个方向思考它是否与 AD 连接也是因为 AD 完全在不同的 VPC 中。
解决方案
这里发生了一些事情。人们通常针对 HTTP、SSH 等实际服务进行身份验证,而不是 HOST。HOST 只是机器本身。
话虽如此,这里还有一些事情要做。您没有在密钥表中定义主机名 - 您在那里有一个用户名。 主持人/在这种情况下,应映射到 DNS 主机名,而不是用户名(在您的情况下为 User1.contoso.com)。以最简单的形式,Kerberos 旨在允许用户原则(像您这样的人,用户)对网络上的服务进行身份验证(这将在 KDC 和密钥表中表示为服务原则)。在更复杂的情况下,它是服务到服务,但我认为您在这里谈论的是用户到服务。我认为在这种情况下,Kerberos 会感到困惑并超时,因为 KDC 上不存在“host/User1.contoso.com”,或者您在 DNS 中没有名为 User1.constoso.com 的机器,或者两个都。您仍然可以将 Kerberos SPN 映射到User1,但HOST需要对应网络上的一台机器。而不是 host/User1.contoso.com@CONTOSO.COM,我会将 User1 替换为 Kerberos 将对其进行身份验证的实际计算机名称。例如,如果机器名为 Server1,请重新创建 keytab,如下所示。还请在创建密钥表时将 Kerberos 领域名称附加到服务原则;您在给出的示例中将其遗漏了。最后,Kerberos 服务应该大写,所以使用HOST而不是host。要解决这个问题:
从 User1 中删除 SPN,如下所示:
setspn -D host/User1.contoso.com@CONTOSO.COM User1
像下面这样重新创建密钥表(我做了三处更改),然后再试一次:
ktpass /princ HOST/server1.contoso.com@CONTOSO.COM /mapuser user1@CONTOSO.COM /pass MyPas$w0rd /out machine.keytab /crypto all /ptype KRB5_NT_PRINCIPAL /mapop set
注意:keytab从不与 AD 通信。它所做的是解密入站 Kerberos 服务票证以告知用户是谁。我在这里写了一篇关于这个机制的文章:https ://social.technet.microsoft.com/wiki/contents/articles/36470.active-directory-using-kerberos-keytabs-to-integrate-non-windows -系统.aspx。
推荐阅读
- x86 - 松弛内存模型上的断点行为
- web - 使用 AFL++ Fuzz Web 应用程序并记录错误消息
- node.js - TypeError:无法读取未定义 discord.js 的属性“主题”
- pagination - 在具有“合并”功能的 apollo 客户端分页配置中,即使调用 fetchMore,现有缓存数据也始终为空
- elasticsearch - 对复合对象数组以及日期范围的 Elasticsearch 查询
- html - Bootstrap 下拉菜单显示为普通的导航链接
- android - Android NDK:使用 AAssetManager 读取大文件
- excel - 如何在 VBA 的“span”中提取数据?
- php - 用户“”的访问被拒绝(使用密码:YES)连接失败:用户“”的访问被拒绝(使用密码:YES)
- javascript - 无法与 amadeus 令牌生成 API 通信