我有一个 Delphi 程序来验证与 Active Directory 集成的系统上的用户凭据。
在 Windows XP/2000 上,当用户提供无效凭据时,程序/系统将按预期运行。在 Windows 7 系统上,该过程不会验证凭据,并允许用户继续操作而无需检查。
答案1
这听起来像是您的应用程序处理登录/身份验证的方式中的一个错误,听起来像是它可能会遇到它不理解的身份验证类型,并通过允许用户进入而“安全失败”。
Windows 7(和 Vista)更改了许多与安全和身份验证相关的设置和默认值。例如,默认情况下,7 不再发送 LanManager 或 NTLMv1 身份验证,它只会发送 NTLMv2。我们发现第三方应用程序使用 Java 模块对 AD 进行身份验证时出现了一些奇怪的行为,这可以追溯到此。
最简单的测试方法是将这 7 台机器设置回 XP 行为(它会尝试使用 NTLMv2 进行身份验证,如果应用程序无法理解,则退回到不太安全的协议)。
将登录安全性降级到 XP 级别的注册表项是:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
"LmCompatibilityLevel"=dword:00000001
(win7默认的LmCompatibilityLevel是3)
或者,您可以使用 GPO 设置相同的内容。您要查找的策略设置位于“计算机配置”>“Windows 设置”>“安全设置”>“本地策略”>“安全选项”,名为“网络安全:LAN Manager 身份验证级别”
显然,您应该只为了测试而这样做,您不会希望在没有完全了解风险的情况下让您的客户长期处于较低的安全级别。
您可以在这里找到这些身份验证设置的详细描述:TechNet 史上最容易被误解的 Windows 安全设置. 更多信息NTLM 身份验证的变更可在此处查看。