所有客户端浏览器在通过本地代理服务器运行时都会反复要求进行 NTLM 身份验证。
当通过本地代理将浏览器指向互联网时,部分(但不是全部)客户端会被反复提示向代理服务器进行身份验证。我使用 Firefox Live Headers 和 Fiddler 检查了 Headers,在所有情况下,身份验证提示都是在请求 SSL 资源时发生的。
例如:
GET http://gmail.google.com/mail/ HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-
flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-
xpsdocument, application/xaml+xml, */*
Accept-Language: en-gb
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR
1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Accept-Encoding: gzip, deflate
Proxy-Connection: Keep-Alive
Host: gmail.google.com
GET http://gmail.google.com/mail/ HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-
flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-
xpsdocument, application/xaml+xml, */*
Accept-Language: en-gb
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR
1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Accept-Encoding: gzip, deflate
Proxy-Connection: Keep-Alive
Host: gmail.google.com
Proxy-Authorization: NTLM
TlRMTVNTUAABAAAAB7IIogkACQAvAAAABwAHACgAAAAFASgKAAAAD1dJTlhQMUdGTEFHU0hJUDc=
GET http://gmail.google.com/mail/ HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-
flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-
xpsdocument, application/xaml+xml, */*
Accept-Language: en-gb
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR
1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Accept-Encoding: gzip, deflate
Proxy-Connection: Keep-Alive
Proxy-Authorization: NTLM
TlRMTVNTUAADA (more stuff goes here I cut it short)
Host: gmail.google.com
此时,浏览器中出现了用户名和密码提示,无论在这个框中输入什么,正确的凭据,随机的废话,浏览器都不会接受这个框中的任何内容,它将继续弹出。如果我按“取消”,有时会出现 http 407 错误,但在其他情况下,我单击“取消”,网站将继续下载并正常显示。
通过我的代理服务器运行的一些客户端可以重复发生这种情况,但在其他情况下根本不会发生。
在客户端计算机正常工作的情况下,我能看到的唯一区别是第 3 次 SSL 资源请求返回了 200 响应,如下所示:
CONNECT gmail.google.com:443 HTTP/1.0
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; MALC)
Proxy-Connection: Keep-Alive
Content-Length: 0
Host: gmail.google.com
Pragma: no-cache
Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAIAAAA
A SSLv3-compatible ClientHello handshake was found.
我尝试重置 Active Directory 中的用户帐户和计算机帐户。所使用的用户帐户和密码是正确的,并且密码已重置,因此它们不会不同步。我已从域中删除客户端甚至代理服务器,然后重新加入它们。我安装了一个完全独立的代理服务器,当我将客户端指向不同 IP 地址上的不同代理服务器时,遇到了完全相同的问题。
答案1
ntlm 需要启用保持活动的 tcp 会话,因为它绑定到 tcp 连接,它通常通过代理关闭或短暂超时,并且许多代理也使用 http 1.0 = 每个连接一个请求。...这本质上给出了同样的问题。将授权更改为 kerberos、digest 或 plain auth。如果您在加速模式下运行,如果站点处于 ssl 中,则两者都不应该是问题。
最好的选择是,如果你可以更改你的代理软件,请寻找保持活动和 http 1.1 连接。没有使用微软代理服务器的经验,我来自另一个阵营,但我很确定你所经历的就是我所描述的。
问候,
彼得