为什么 squid 会破坏 kerberos/NTLM 身份验证?

为什么 squid 会破坏 kerberos/NTLM 身份验证?

我使用 squid 2.6.22(Centos 5 默认)作为代理。当网页需要 NTLM 或 Kerberos 身份验证时,Squid 似乎会破坏网页的身份验证过程。我使用 sharepoint 2007 进行了测试,并尝试了所有 3 种身份验证方法(NTLM、Kerberos、Basic)。在所有情况下,不使用 squid 访问网站都可以正常工作。当我使用 squid 访问同一页面时,只有 basic-auth 有效。使用 IE 或 Firefox 没有任何区别。任何人都可以使用 Squid 本身(没有配置 auth_param)。在网上找到解决方案有点棘手,因为大多数主题都围绕着 auth_param 向 squid 验证用户身份,而不是向 squid 后面的网页验证用户身份。有人能帮忙吗?

编辑:
抱歉,但我的第一次测试完全搞砸了。我针对错误的网络服务器进行了测试(提醒自己:测试前务必检查假设)。现在我意识到问题场景完全不同。

  • Kerberos 适用于 IE
  • Kerberos 适用于 Firefox(在 about:config 中更改“network.negotiate-auth.trusted-uris”之后)
  • NTLM 适用于 IE
  • NTLM 在 Firefox 中不起作用(即使在 about:config 中更改了“network.automatic-ntlm-auth.trusted-uris”)

顺便说一句:squid 中提供 NTLM-passthrough 的功能称为“连接固定”,HTTP 标头为“Proxy-support: Session-based-authentication”

答案1

我认为你问的问题与如何将 apache 配置为基本身份验证或在代理时允许 ntlm?。特别是,如果您想同时对代理和远程站点进行身份验证,这是不可能的(除非客户端使用CONNECT)。

如果您的情况是您不想向 Squid 进行身份验证,而只想向远程站点进行身份验证,那么我认为 Squid 在某种程度上做了正确的事情:一旦您通过身份验证获取的资源进入缓存,它现在也可用于其他客户端的非身份验证请求。更准确地说,看看这个流程:

  • /index.html用户A请求了某处的资源that.server.com,并提供了认证信息。
  • 服务器返回 HTTP 状态 200 并且 Squid 已缓存资源/index.html
  • 现在用户 B 请求了相同的资源,但未提供任何身份验证信息/或提供了一些经过身份验证的信息。

可能的情况:

  • Squid/index.html从缓存中返回给用户 B。这是错误的,因为只有服务器知道哪些用户可以访问哪些资源。
  • Squid 还会尝试将身份验证信息与一起缓存/index.html。对于基本身份验证,Squid 可以捕获用户名。其他机制 (NTLM/Kerberos) 仅通过 HTTP 发送哈希,因此无法获知用户名。
  • Squid 从不缓存/index.html

答案2

Firefox 中有一个 Bug,导致 NTLM 在某些情况下失败。使用 Squid 作为代理几乎总是会满足这些条件。请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=602814

相关内容