為什麼 squid 會破壞 kerberos/NTLM 身份驗證?
我使用 squid 2.6.22(Centos 5 預設)作為代理。當需要 NTLM 或 Kerberos 身份驗證時,Squid 似乎會破壞網頁的身份驗證過程。我使用 sharepoint 2007 進行了測試,並嘗試了所有 3 種身份驗證方法(NTLM、Kerberos、Basic)。在所有情況下都可以在沒有 squid 的情況下訪問該站點。當我使用 squid 訪問同一頁面時,只有基本身份驗證有效。使用 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””
Firefox 中有一個錯誤,導致 NTLM 在某些情況下失敗。使用 Squid 作為代理幾乎總能滿足這些條件。見https://bugzilla.mozilla.org/show_bug.cgi?id=602814
我認為您所問的與如何將 apache 配置為基本身份驗證或在代理時允許 ntlm 非常相關?. 特別是,如果您想對代理進行身份驗證,然後對遠端站點進行身份驗證,這是不可能的(除非客戶端使用
CONNECT
)。如果您的情況是您不想對 Squid 進行身份驗證,而只想對遠端站點進行身份驗證,那麼我認為 Squid 在某種程度上是在做正確的事情:一旦您通過身份驗證獲取的資源在記憶體中,它現在也可用對於其他客戶端的未經身份驗證的請求。更準確地說,看看這個流程:
- 使用者 A 請求了
/index.html
一些資源that.server.com
並提供了身份驗證資訊。- 伺服器返回 HTTP 狀態 200 並且 Squid 已經記憶體了資源
/index.html
。- 現在使用者 B 請求了相同的資源並且沒有提供認證資訊/或提供了一些認證資訊。
可能的場景:
- Squid
/index.html
從記憶體中返回給使用者 B。這是錯誤的,因為只有伺服器知道哪些使用者可以訪問哪些資源。- Squid 還嘗試將身份驗證資訊與
/index.html
. 對於基本身份驗證 Squid 可以擷取使用者名。其他機制(NTLM/Kerberos)僅通過 HTTP 發送散列,因此無法獲知使用者名。- 魷魚從不記憶體
/index.html
。