HTTP 和 HTTPS 代理處理流量的方式截然不同。了解兩者的區別有助您選擇合適的代理類型,並避免常見的安全誤解。
HTTP 代理專為處理標準未加密的網絡流量而設計。當您的瀏覽器設定為使用 HTTP 代理,並請求 HTTP(非 HTTPS)頁面時,代理會收到您的完整請求——包括 URL、HTTP 標頭及請求內容。它可以在將內容轉發至原始伺服器之前讀取、檢查、修改或快取這些內容。代理也會接收完整回應,並可在將其傳回您的瀏覽器之前進行修改。
這種完全可見的架構使 HTTP 代理成為內容過濾、快取及流量分析的強大工具。企業過濾代理利用此功能,根據 URL 模式封鎖非工作網站的存取。網絡應用防火牆用它來檢查並封鎖惡意 HTTP 請求,使其在到達應用伺服器之前被攔截。CDN 快取節點用它來提供已快取的內容,無需聯繫原始伺服器。讀取和修改流量的能力是所有這些使用情境的核心。
其限制在於 HTTP 代理只理解 HTTP 協定。它們無法原生處理 HTTPS 流量,無法代理 BitTorrent 或電郵等非 HTTP 協定,也無法處理現代網絡流量的全部範疇——而現代網絡流量已絕大多數轉向 HTTPS。純 HTTP 代理對於當今大多數網站毫無用處,這就是為什麼幾乎所有現代代理服務都支援 HTTPS 隧道的 CONNECT 方法,以及通常支援全協定的 SOCKS5。
HTTPS 代理——或更準確地說,透過 CONNECT 方法支援 HTTPS 隧道的代理——在無法讀取內容的情況下處理加密的網絡流量。當您的瀏覽器想要透過代理存取 HTTPS 網站時,它會向代理發送純文字 CONNECT 請求,識別目標主機(例如 CONNECT github.com:443 HTTP/1.1)。代理建立到 github.com:443 的 TCP 連線,然後以「200 連線已建立」回應,之後成為透明中繼。
從那時起,代理在您的瀏覽器和目標之間盲目地雙向轉發加密位元組。TLS 握手直接在您的瀏覽器和目標伺服器之間進行——代理無法解密或檢查此流量,因為它沒有目標伺服器的私有 TLS 金鑰。這保留了端對端加密:目標看到的是您瀏覽器的 TLS 用戶端問候,而非代理的。代理僅透過傳遞加密串流。
CONNECT 隧道方式意味著,雖然您的流量內容受到 TLS 保護,但某些元數據仍然可見。CONNECT 請求本身是純文字:任何監視您與代理之間連線的人都可以看到您正在連線到 github.com:443——即使他們看不到您在那裡做什麼。TLS 握手中的 SNI(伺服器名稱指示)也會洩露目標主機名稱。若要完全隱藏元數據,VPN 比 HTTPS 代理更適合,因為它甚至會加密目標主機名稱。
某些企業和政府代理部署使用 SSL 檢查(亦稱 HTTPS 攔截或 TLS 檢查)來解密和檢查 HTTPS 流量。這與標準 HTTPS 代理不同:SSL 檢查代理並非充當盲目隧道,而是執行中間人解密。代理向您的瀏覽器提供自己的 TLS 憑證(由安裝在員工裝置上的企業根憑證授權機構簽署),同時與目標伺服器建立自己的 TLS 連線。
從用戶的角度來看,瀏覽器在網址欄顯示鎖頭圖示和 HTTPS。但憑證由公司的內部憑證授權機構簽署,而非由網站的真實憑證授權機構簽署。您的瀏覽器與代理之間的流量使用一個 TLS 工作階段加密;代理與目標伺服器之間的流量使用另一個單獨的 TLS 工作階段加密。代理在這兩個工作階段之間以明文讀取所有內容——記錄流量、掃描惡意軟體、封鎖違反政策的行為,或檢查數據外洩企圖。
SSL 檢查具有爭議性。在已向員工妥善披露的合法企業部署中,它確實有真實的安全用途——偵測惡意軟體下載、執行 DLP 政策,以及監控內部威脅。然而,它從根本上破壞了 HTTPS 的信任模型,而 HTTPS 承諾在用戶與網站之間提供端對端加密。若您在企業網絡上,發現網站憑證由內部憑證授權機構(而非 DigiCert 或 Let's Encrypt 等受信任的公共機構)簽署,則您的流量正在被檢查。
對於大多數瀏覽現代網絡的個人用戶而言,相關的區別並非 HTTP 與 HTTPS 代理之爭——而是代理服務是否支援 HTTPS 隧道的 CONNECT 方法。幾乎所有信譽良好的商業代理供應商都提供支援透過 CONNECT 進行 HTTP 和 HTTPS 隧道的代理,在您的瀏覽器中以相同方式設定。許多服務上的「HTTP 代理」標籤指的是代理設定協定,而非對未加密流量的限制。
當您需要代理非瀏覽器應用程式或任何非 HTTP/HTTPS 的流量時,SOCKS5 代理是更好的選擇。如果您正在設定 torrent 用戶端、SSH 隧道工具、數據庫用戶端或自訂 Python 腳本,SOCKS5 是唯一能在這些應用程式範疇中可靠運作的代理類型。SOCKS5 也處理 HTTP 代理無法處理的 UDP 流量。大多數商業代理供應商免費提供 SOCKS5 及 HTTP 代理選項。
對於注重隱私的使用情境,請注意每種代理類型所洩露的資訊。使用 CONNECT 隧道的 HTTPS 代理以純文字洩露目標主機名稱。SOCKS5 代理可設定為在代理伺服器端解析 DNS(使用 socks5h:// 而非 socks5://)以避免 DNS 洩漏。這兩種類型都不提供 VPN 所具備的全面流量加密。對於敏感瀏覽——銀行、醫療、私人通訊——無論您可能同時使用哪種代理類型,VPN 仍是合適的工具。