用于Windows的MIT Kerberos下的多领域和多个TGT

我的本地计算机使用Windows 7 Pro,属于由AD服务器pipe理的域LR。 login到我的电脑,同时连接到该领域的networking。 我可以用MIT Kerberos for Windows版查看TGT。 4.0.1。

我想访问外国领域的资源,FR。 LR和FR之间没有Kerberos信任,但它们允许彼此之间的TCP通信。 我用KDC(Red Hat IdM / FreeIPA)申请了FR的TGT,并在挑战时成功input我的密码。 再次,我可以查看TGT与MIT Kerberos for Windows版本。 4.0.1。 我现在可以通过SSH访问FR中的资源,而不需要密码,尽pipe源于LR。

问题是,当我拿到FR的TGT时,我的LR主pipe的TGT消失了。 在MIT Kerberos中只有FR TGT是可见的。 如果我locking了我的电脑,然后用我的密码解锁,现在FR TGT消失了,换成新的LR TGT。

看来针对Windows的MIT Kerberos一次只能存储一个TGT。 每个TGT完全适用于所有意图和目的的领域。 我怎样才能configuration麻省理工学院的Kerberos让我有两个TGT一次,每个领域? 是否有可能“划分”与多个客户端实例,每个指向不同的KRB5_CONFIG和本地密钥表? 如果我不能,是否有一个客户端Kerberos 5的替代Windows实现,即使在没有域间信任的情况下也是如此?

PS – 我不想要信任。 不能得到信任。

更新:我之前忽略了一些这些细节,因为我认为它可能会混淆这个问题。 但根据布拉德的回答,这可能是有保证的。 我期望大多数本地软件将使用Kerberos的内置Windows实现,并始终使用LR密钥表。

但是,像我这样的高级用户使用Cygwin下的heimdal将SSH连接到FR。 我期望任何通过Cygwin DLLs使用heimdal和从来没有看到LR TGT(它不,至less不是默认情况下)。 我明确指出,继续前进。

棘手的部分进来非电力用户我必须支持谁不使用Cygwin,但使用PuTTY。 PuTTY允许您指定要使用的GSSAPI实现的库path和DLL。 例如,我正在configurationSSH会话来使用MIT Kerberos DLL而不是内置的Windows DLL。 我希望有一个DLL在那里,要么从来没有试图findLR TGT(如heimdal)或允许来自多个领域的多个TGT。 它不必像MIT Kerberos那样有一个GUI窗口,但是它有帮助。

那么我不会说这不能用Windows来完成,但我会说这个限制是基于会话的。 那么问题是,每个会话Windowscaching一张票。 当您locking您的计算机,然后解锁它的另一个会话启动,并从KDC请求一个新的密钥。 同样的事情发生时,你注销,然后再次到您的计算机。 这个方法实际上是如何确定服务器会话的用户权限, 这意味着密钥/票据可以被caching,以便您启动的每个服务器资源或会话都不需要询问您的密码,但是我从来没有听说过/读/研究它可以caching多个。

现在,你可能已经知道,由于你的知识已经显示在你的问题中,所以我会说,基于Windows存储你在TGT发布和基于会话时获得的密钥的事实,我没有认为这是可能的与Windows。 用于Windows的MIT Kerberos可能有办法在一个用户下启动两个会话,但即使如此,我也不确定您访问的资源是如何知道要使用哪个票据/密钥对。 那有意义吗?

请参阅此处了解Windows如何存储TGT /密钥对的说明。

很好的问题的方式。

好的,我想出了一个需要更多波兰语的工作解决scheme,因此可能无法在所有环境中工作。

这适用于:

  1. MIT Kerberos for Windows 4.0.1 with Windows支持工具(KSETUP.EXE,KTPASS.EXE)
  2. PuTTY 0.63
  3. Windows 7 SP1

我正在寻找麻省理工学院的Kerberos源,并遇到了Windows的README 。 特别感兴趣的是凭证caching的不同值。 它支持API的默认值 ,但我惊讶地发现我的registry使用MSLSA:相反。

我在HKEY_CURRENT_USER\Software\MIT\Kerberos5下玩弄了不同的ccname值。 我尝试了MEMORY:起初,这导致了一些有趣的行为。 当打开一个PuTTY会话时,我的MIT Kerberos票务pipe理器窗口将恢复到前台,要求我input凭证。 哇! 这从来没有发生过,但唉,腻子会拒绝它。 对我来说这个技巧的价值是FILE:C:\Some\Full\File\Path 。 我不确定如何确保对指定文件的访问,所以我将把它作为读者的练习。 我得到了相同的窗口前景行为,这次只有PuTTY喜欢它。 票务pipe理器窗口最后也显示了LR和FR票据。 这些票据被certificate是可转发的,可以在多个Windowslocking/解锁的情况下生存下来。 注意:确保完全退出并重新启动票据pipe理器在registry编辑之间。 我还没有尝试过一个ccnameAPI:呢。

我不知道这是否有所作为 ,但是在开始工作之前,我也玩过了KSETUP 。 起初,一个无参数的KSETUP只会显示有关LR的信息。 我在本地工作站上添加了关于FR的一些信息。

 ksetup /AddKdc FOREIGN.REALM KDC.FOREIGN.REALM ksetup /AddRealmFlags FOREIGN.REALM TcpSupported Delegate NcSupported 

对我来说,它看起来有点像Windows中的Kerberos实际上有一个错误。

我发现以下内容:

如果我在KfW 4.0.1窗口中使用“get ticket”选项,它只是工作(TM); 我可以点击“获取门票”button,并获取我login时获得的原始门票的额外门票。

如果我点击KfW窗口中的“make default”选项,那么从每次点击“get ticket”开始,新票将取代默认票,而不是将另一个条目添加到已知票的列表中。 在那个时候检查registry会显示一个ccname条目(如Toddius的答案)已被添加。 令人惊讶的是, 移除该条目将恢复先前允许多张票据的行为。

继Toddius的回答之后,我有一个类似的情况(Windows 7 Enterprise 64位,joinAD域,同时运行Windows NT 4.0的MIT Kerberos)的同事:他的Kerberos Ticket Manager副本只允许他有一个校长/一个TGT。 每当他使用“Get Ticket”button获得一个不同的委托人的TGT时,以前的委托人就会消失。

我查阅了自述文件 ,并且大部分registry项都按预期设置, 除了pathHKEY_CURRENT_USER\Software\MIT\Kerberos5ccname密钥。 该键被设置为值MSLSA: 我们的解决scheme是将其改为API: 更具体地说,这些步骤是:

  1. 退出Kerberos票务pipe理器,以及所有其他应用程序(因为您将重新启动)。
  2. 在registrypathHKEY_CURRENT_USER\Software\MIT\Kerberos5 ,将ccname密钥更改为API: (API,然后冒号)。
  3. 退出regedit,然后重新启动。
  4. login后,运行Kerberos Ticket Manager,并使用Get Ticketbutton获取非AD主体的TGT。

通过上面的步骤,一切正常,我的同事现在可以同时看到多个校长/ TGT。

顺便说一下,用于Windows的MIT Kerberos引入了自己的一套命令行程序(如klist),这些程序支持多个凭据caching。 在我的64位系统上,当我运行"C:\Program Files\MIT\Kerberos\bin\klist.exe" -A"获得多个TGT后,我在MSLSAcaching中看到我的Active Directory主体,然后每个额外的委托人都有一个APIcaching。

PS这是我在这个网站上的第一个条目,所以我不能将它添加为Toddius的答案的评论。 道歉!