允许在没有Active Directory信任的情况下进行winhttp委派

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了允许在没有Active Directory信任的情况下进行winhttp委派相关的知识,希望对你有一定的参考价值。

我正在使用kerberos身份验证在双跃点场景中开发应用程序:客户端连接到需要使用客户端凭据连接SQL服务器的服务器。

我已经使用kerberos麻省理工学院发布的GSoap和GSS-API完成了它;但我本来希望使用winHTTP来处理身份验证。

然而,当我尝试将winHTTP与GSOAP WINHTTP PLUGIN(code.google上的gsoapwinhttp)一起使用时,域控制器会阻止委派。我想保留此Active Directory配置:

当我查看GSS-API kerberos票时,我发现了几个允许委托的标志,例如fowardable或deleg_req_flag:

所以我的问题是:我可以修改winHTTP标志,以便在不更改域控制器配置的情况下允许委派吗?

编辑:

我在setCredentials中使用选项WINHTTP_AUTH_SCHEME_NEGOTIATE,在setOption中使用WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW,以确保使用Microsoft网站WinHttpSetCredentials中指定的Kerberos或NTLM。

使用Fiddler我检查了HTTP连接,它正在使用Kerberos,但我仍然无法委托给我的下一个服务器。

我试图使用几乎所有可能的setOption选项,例如WINHTTP_ENABLE_SSL_REVERT_IMPERSONATION或者看起来像委托的所有东西但是在使用这个选项时我有一个奇怪的错误:

文件结束或无输入:消息传输中断或超时(629s recv send delay)

我试图设置一个不同的recv_timeout但仍然是相同的错误。

.

答案

我经常研究这种类型的问题。您遇到了Kerberos双跳问题。在您提供的配置屏幕截图中,您必须配置委派;现在代表团没有设定。要尝试的第一个项目是开放委派,要选择单选按钮:信任此计算机以委派任何服务(仅限Kerberos)。您在AD中的计算机帐户上设置此帐户,该帐户需要使用客户端的凭据连接SQL服务器 - 而不是在域控制器帐户上。如果您的应用程序实际上是在域控制器上运行,那么这是一个已知问题和不受支持的配置将无法正常工作 - 请将应用程序移动到域的成员服务器。

关于那些允许委托如fowardable或deleg_req_flag显示为在Fiddler跟踪中设置的标志,我不确定为什么它们显示为set,但它们可能是从错误的帐户设置的。从您发布的屏幕截图的帐户中,根本没有配置Kerberos委派。

在您的方案中,您必须在运行WinHTTP进程的计算机帐户上设置Kerberos委派,在下面显示的示例中为“Server1”。

Simple Kerberos delegation scenario

在该帐户的Kerberos委派属性中,您可以指定打开委派(如上所述的顶部单选按钮),或者对Server1可以转发用户凭据(Kerberos服务票证)的Server2上的进程进行约束委派。

以上是关于允许在没有Active Directory信任的情况下进行winhttp委派的主要内容,如果未能解决你的问题,请参考以下文章

受信任域之间的 Active Directory LDAPS

Active Directory - Hortonworks 跨领域信任建立

FreeIPA到Active Directory信任不起作用:访问被拒绝错误

Azure Active Directory,允许的令牌受众似乎没有做任何事情

在 C# 中验证远程 Active Directory 的用户

根据 Active Directory 策略检查密码 [重复]