在 Windows Server 2008 上以本地系统身份进行 NTLM 代理身份验证

在 Windows Server 2008 上以本地系统身份进行 NTLM 代理身份验证

我有一个应用程序需要通过仅支持针对本地域控制器的 NTLM 身份验证的代理发送 HTTP 请求。我使用 libcurl SSPI 版本发送请求,该请求在 Windows 7+ 上以本地系统运行,在 Windows Server 2008 上以域用户运行。

但是,当我在 S2008 上以本地系统用户身份运行该应用程序时,代理身份验证失败。检查 NTLM 握手后发现:

  • “协商匿名”标志由 S2008 客户端设置,并且
  • 未发送任何用户详细信息。

在 Windows 7 + 上不使用匿名身份验证,而是使用计算机身份凭据。一些研究表明,使用计算机凭据代替匿名 NTLM 身份验证是 Windows 7+ 中的一项新功能(参见 technet)那么,如果是这种情况,我有什么方法可以在域控制器或代理上启用匿名身份验证以允许匿名身份验证成功?

我正在使用带有 winbind 的 Squid 3.2.8 代理和 Windows Server 2012 R2 域控制器。

答案1

Windows Server 2008 上的这些身份验证问题是由于 Windows 7/Windows Server 2008 R2 + 上的 NTLM 功能差异造成的。

为了启用这些旧版操作系统的身份验证,必须启用并配置三个组策略设置Computer Configuration/Policies/Windows Settings/Security Settings/Local Policies/Security Options

  • 网络安全:基于 NTLM SSP(包括安全 RPC)的客户端的最低会话安全 - 清除“需要 128 位加密”
  • 网络安全:基于 NTLM SSP(包括安全 RPC)的服务器的最低会话安全 - 清除“需要 128 位加密”
  • 网络安全: 允许本地系统使用 NTLM 的计算机身份 - 启用此策略

应用这些更改后,旧版操作系统能够成功进行身份验证和遍历代理。

相关内容