我正在尝试开发一个可以遍历NTLM身份validation代理的networking隧道。 作为我正在调查NTLM身份validation如何工作的一部分。 我的testing安装程序在configuration为需要NTLM身份validation的Windows盒子上安装了WinGate代理。 我的Windows客户端设置为使用WinGate机器作为代理。 WinGate重新启动后,我打开的第一个网页需要身份validation – 我通过Fiddler看到NTLM交换。 来自同一台PC的后续请求似乎不需要authentication。 我的意思是来自PC的任何请求,而不仅仅是来自同一浏览器的请求,例如,在Chrome中完成初始身份validation时打开Firefox。 我已经使用Fiddler(以前还用Wireshark)捕获了所有的stream量 – 我没有看到有任何令牌或标识被发送到代理的证据。 那么代理如何知道允许这些后续请求通过? 这是NTLMauthentication的预期行为?
我find了答案 – WinGate代理在默认情况下具有非标准的行为 – 它根据客户端的IP地址caching凭据。 所以一旦NTLMvalidation过一次,所有来自PC的后续请求都会被authentication。 这可以通过在WinGate中创build一个凭据规则,并select“不允许其他会话使用会话build立的凭据”
只是为了更多的信息。 与NTLM握手/授权相关的工作还有很多。 对于初学者来说,请求通常会被发送3次,以完成握手(这与邮件正文POST是有问题的,IE有一个可怕的黑客试图缓解这,实际上只是导致问题)。
因此,如果对每个连接进行身份validation,代理处理3次请求,并且还必须通过SSPI将身份validationstream量传递给域控制器,因此域控制器上的负载也更高。 然后,WinGate必须从AD中检索对象,所以AD DS上的LDAP加载也更高。
通过caching凭据来减less此负载。 这当然是基于一个假设,那个IP上只有一个用户。 如果这个假设是无效的,WinGate有规则来覆盖这个行为。