Squid,身份validation,Outlook Anywhere,Windows 7和HTTP 1.1 = NIGHTMARE

我在Samba 3.5.4上运行Linux CentOS 5.4上的Squid代理(最新版本,3.1.4),以便为域用户提供authentication的Web访问; 一切工作正常,甚至Windows 7客户端都完全支持。 对于域用户来说,身份validation是透明的,而对于非域用户则是明确要求的,并且如果用户可以提供有效的域凭证,则它是有效的。 一切都很好,很好。

然后,Outlook Anywhere进入,痛苦和痛苦随之而来。

当Outlook(不论是2007年还是2010年,无所谓)在Windows XP客户端上运行时,它通过Squid代理优雅地连接到远程Exchange服务器。

当它在Windows 7上运行时,它不会。

如果authentication需求从代理中解除,那么所有的工作都在Windows 7上运行,所以这个问题显然与使用Squid的NTLMauthentication有关。

深入挖掘(WireShark),我发现Outlook Anywhere在Windows 7上运行时使用HTTP 1.1,而在Windows XP上使用HTTP 1.0。 而且,即使在最新的版本中,Squid看起来仍然存在一些严重的问题, 尤其是在SSL和代理身份validation混淆的情况下。

在等待Squid完全正式支持HTTP 1.1(看起来这可能需要相当长的时间)的同时,我正在寻找以下解决scheme之一:

  • 如果可能的话,让鱿鱼正确处理。
  • 识别Outlook无处不在的连接,并让鱿鱼不需要validation他们。 但是这并不容易:在Windows XP和Windows 7上运行时,Outlook的行为也会有所不同,而在Windows XP上,Outlook发送一个非常好的用户代理string“MSRPC”,而在Windows 7上它不会发送任何(为什么? 为什么 ?!?)。
  • 即使在Windows 7上运行,强制Outlook Anywhere也使用HTTP 1.0。不,这不像在Internet Explorer中取消select“使用HTTP 1.1”那么简单,看起来像Outlook忽略了该设置,并自行select使用哪种协议。
  • 任何其他可行的解决scheme,不涉及到白名单特定的目标Exchange服务器,这是我试图避免的最后一个解决scheme。

Windows 7,Server 2008,我相信即使Vista默认也不支持NTLMv1。 如果它是在XP上工作,但不是在Windows 7上,我将首先启用NTLMv1,看看它是否能解决你的问题。 当我遇到类似的问题时,这里是帮助我的post。 Windows7 – “指定的networking密码不正确。”密码实际上是正确的

rpcping.exe加载到Dependency Walker中,显然它使用了WinHttp.dll而不是WinInet.dll 。 因此,将WinHttp.dll从Windows XP SP3复制到Outlook.exe所在的C:\Program Files\Microsoft Office\Office11会导致Outlook使用User-Agent和所有其他标题字段发送HTTP/1.0请求在我的旧电脑上。

Windows 7 SP1上的现有版本:6.1.7601.17514

从Windows XP SP3复制的版本:5.1.2600.6175

这不是最干净的解决scheme,但现在必须做。 如果有人有更好的主意,我会全力以赴

3.1.4不是Squid的最新版本 – 3.1分支中的当前上游版本是3.1.16,并且在变更日志中有许多与HTTP 1.1一致性相关的变化。 您可能需要尝试更新的版本。

这个来自squid用户的文章告诉我们,至less在1月份,即使使用最新的3.1.x也是不够的,所需的HTTP 1.1支持修补程序只有3.2 beta。