Proxy

是否允許中間代理在代理身份驗證期間添加 cookie?

  • August 23, 2019

我最近遇到了某種安全設備(BlueCoat),它要求所有到網際網路的連接都必須通過它進行代理(你好,中間人),因此使用特殊的 SSL 證書來攔截所有流量。

這阻止了 Git 的正常執行,即使設置了適當的http.proxyhttp.sslCAInfo屬性以確保 SSL 連接本身工作。

使用環境變數GIT_CURL_VERBOSE=1,我們發現使用的時候git clone,會出現HTTP 407(需要代理認證)。Git 正確地完成了此身份驗證,並在此結束時,設備返回帶有 cookie 標頭的 HTTP 200 Set-Cookie

然後 Git 將連接到目標伺服器,但沒有cookie,導致 HTTP 401。

解決方案是設置 git 配置選項http.saveCookies=true

問題: 中間代理添加 cookie 是否真的被 RFC 標准允許?

Anthony Rich向 http-state 郵件列表提出了同樣的問題,但沒有任何回應。他確實注意到在

RFC 2965 HTTP 狀態管理機制,3.5 記憶體代理角色它說:代理不得在代理響應(請求)中引入自己的 Set-Cookie2(Cookie)標頭。

但是,取代的 RFC 6265根本不再提及這一點。

HTTP cookie 是一團糟。沒有真正的標準;RFC,就其價值而言,只是試圖記錄實際的使用者代理正在做什麼。

在任何情況下,您可能想要閱讀的 RFC 是RFC 7235,它指定代理應該發送一個 Proxy-Authenticate 帶有 407 狀態的標頭來請求身份驗證資訊,並且接收此資訊的使用者代理應該使用一個重試請求Proxy-Authorization 標頭包含代理的身份驗證資訊。

可以使用許多質詢/響應方法來提供此資訊;最廣泛使用的是“基本”(RFC 7617),因為幾乎所有講 HTTP 的東西都實現了它。

IANA 維護著一個已知 HTTP 身份驗證方案的系統資料庫。作為一般規則,它們使用之前命名的 HTTP 標頭,或者它們被標記為不合規。沒有人使用 cookie 進行身份驗證。

代理是否允許添加或更改 cookie,我不能說。RFC 在這一點上似乎真的不是很清楚。這肯定是出乎意料的行為,尤其是對於身份驗證。而 BlueCoat 在質量上有著悠久的歷史……

引用自:https://serverfault.com/questions/883586