我正在尝试编写一个执行Kerberos委派的概念验证应用程序。我编写了所有代码,它似乎工作(我正在验证正常),但生成的安全上下文没有设置ISC_REQ_DELEGATE标志。
所以我认为可能有一个端点(客户端或服务器)被禁止委托。但是,我没有对SPN进行身份验证。只有一个域用户对另一个域用户。作为InitializeSecurityContext()
的SPN,我正在传递“someuser@mydomain.lan”(这是运行服务器应用程序的用户帐户)。据我了解,域用户默认启用了委派。无论如何,我要求管理员检查,“帐户是敏感的,无法委派”复选框已关闭。
我知道如果我的服务器作为NETWORK SERVICE运行并且我使用SPN连接到它,那么我需要AD中的计算机帐户选中“Trust computer for delegation”复选框(默认情况下关闭) ),但......事实并非如此,对吧?或者是吗?
此外 - 当设置了计算机帐户中的复选框时,是立即进行更改,还是必须重新启动服务器PC或等待一段时间?
答案 0 :(得分:2)
根据this,只有在使用约束委派时才会忽略ISC_REQ_DELEGATE。我非常确定要发生约束委派,您必须明确说明允许帐户在Active Directory中委派给哪些服务(AD管理单元中的用户或计算机的委派选项卡)。
我不确定使用UPN与SPN的规则。您是否尝试启用Kerberos event logging并查看事件日志?这些信息通常很神秘,但通常可以破译。
您对NETWORK SERVICE方案的描述是准确的。默认情况下,委托信任是关闭的,但NETWORK SERVICE可能有权自行注册SPN(我认为这可以通过组策略确定)。
当您勾选方框时,更改会立即发生,但可能必须在域中的所有域控制器中传播(我通常使用单个DC在测试域中进行测试)。因此,重新启动服务应用程序就足够了,您无需重新启动。
Curb票证驻留在客户端计算机上。它们具有到期时间,可以使用klist或kerbtray手动刷新。