如何測試加密用戶端問候通過代理的相容性

Encrypted Client Hello(ECH,加密用戶端問候)會保護 TLS ClientHello 中包括 SNI 目標名稱在內的敏感欄位。它改變被動網路觀察者可見的資訊,但不表示所有代理路徑都天然私密、相容或設定正確。
瀏覽器可能從 DNS HTTPS 記錄取得 ECH 設定,也可能只傳送 GREASE 佔位、在設定不符後重試、停用 ECH 回退,或直接重用現有連線。因此,頁面載入成功不能證明 ECH 已被接受。
本文為獲授權設施建立驗收測試,涵蓋 HTTP CONNECT、HTTPS 代理、受管 TLS 檢查與直連控制路徑,不用於繞過組織政策或對代理營運方隱藏流量。
先定義可見性邊界
| 路由元件 | 可能看見的資訊 |
|---|---|
| 本機 DNS 解析器 | HTTPS 記錄查詢與回傳的 ECH 設定 |
| 被動網路路徑 | 目標位址、時間、外層 ClientHello 與公開名稱 |
| 明確代理 | 代理驗證與用戶端要求的 CONNECT authority |
| 透明隧道 | 外層 TLS 交握,通常看不到加密內層 ClientHello |
| 獲核准的 TLS 檢查閘道 | 依組織政策終止的流量 |
| 目標邊緣 | 內層 ClientHello 與 ECH 是否接受 |
若用戶端在 CONNECT 要求中傳送主機名稱,ECH 不會向明確代理隱藏該名稱。隱私與相容聲明必須分開測試。評估前先以代理 TLS 檢查稽核確認每個終止點。
建立小型受控矩陣
使用自己控制的目標與 DNS 區域,或供應商支援的測試端點。準備目前 ECH 設定、無 ECH 設定、隔離區中的過期測試設定、只回傳 A/AAAA 而不回傳 HTTPS 記錄的解析路徑,以及直連、HTTP CONNECT、HTTPS 代理與明確獲准的檢查路徑。
保持應用內容、帳號狀態、用戶端版本與地區不變,每次只改一個變數。不要修改第三方 DNS 或正式檢查策略。
先驗證 DNS 責任方
ECH 依賴用戶端取得可用設定,通常來自 DNS HTTPS 服務繫結。記錄解析器類別、回應碼、HTTPS 記錄是否存在、設定識別或雜湊、TTL 與回應年齡。
比較每條路由上用戶端實際看到的答案。代理可能完全不承載 DNS;作業系統、瀏覽器安全 DNS 或 SOCKS 遠端解析模式可能選擇不同解析器。SVCB 與 HTTPS DNS 相容測試可建立記錄發現與別名處理基線。
不要記錄完整瀏覽歷程或客戶主機名稱,應使用自有樣例、匿名路由別名與設定雜湊。
證明「接受」,而非只看見擴充
出現 encrypted_client_hello 擴充不代表 ECH 成功。用戶端即使沒有可用設定,也可能傳送 GREASE 值。證據應區分未嘗試、僅 GREASE、使用預期設定的真實 ECH、服務端接受、驗證過的重試設定、明確失敗,以及未使用 ECH 的回退或重試。
優先使用能明確回報接受狀態的用戶端或服務端診斷。若獲准擷取封包,只把它當輔助證據並縮短保留。不能只憑 HTTP 成功回應推論 ECH 已接受。
隔離代理跳點
依序執行冷啟動測試:獲核准直連控制、HTTP CONNECT、單獨驗證用戶端側 TLS 的 HTTPS 代理,以及適用時的受管檢查路徑。冷測試之間關閉可重用連線池,記錄代理協商、CONNECT 結果、目標 TLS 結果、ECH 狀態、ALPN、位址家族與總耗時。
HTTPS 代理的用戶端到代理 TLS,與 CONNECT 內部目標 TLS 是兩條不同連線。目標 ECH 不負責驗證代理憑證。ALPN 協商稽核可將協定協商失敗與 ECH 失敗分開。
識別重試與回退
設定輪替可能使服務端拒絕舊設定並提供重試資訊,用戶端接著以新傳輸連線再試。這與靜默停用 ECH 後繼續不同。
建議記錄路由別名、用戶端版本、解析器類別、HTTPS 記錄雜湊、ECH 提議類別、接受狀態、重試次數、回退類別、連線/TLS/總耗時與結果類別。以無敏感資訊的要求標記關聯用戶端、代理與目標證據,絕不記錄代理密碼、Cookie、私鑰或原始客戶目標。
代理失敗後用戶端若意外直連,ECH 測試應判定失敗。應把代理繞過稽核套用於每次重試,而非只有第一次要求。
測試冷暖狀態
DNS TTL、ECH 設定快取、TLS 工作階段恢復與連線重用都可能掩蓋變化。至少測試空 DNS/連線狀態的冷程序、TTL 內第二次要求、受控設定輪替後、快取到期後、可進行工作階段恢復的暖要求,以及路由變更後的新連線。
如果要求重用了現有連線,既沒有新 DNS 也沒有新 TLS 交握,就不能把結果歸因於設定輪替。每個樣本都要記錄是否真正建立新傳輸。
驗收門檻
- 預期 DNS HTTPS 記錄抵達正確用戶端。
- 能區分真實 ECH 與僅 GREASE。
- 目標側證據在預期時確認接受。
- 過期設定依文件執行重試。
- 沒有未經核准的直連回退。
- 代理與目標 TLS 故障可分別歸因。
- 準確描述明確代理可見性。
- 受管檢查行為符合組織政策。
- 快取與連線重用不會偽裝成新成功。
- 日誌只保留別名與雜湊,不含秘密或瀏覽歷程。
疑難排解對照
| 現象 | 優先檢查 |
|---|---|
| 只有一個用戶端缺少 HTTPS 記錄 | 解析器責任方、安全 DNS 政策與快取 |
| 有擴充但服務端回報未使用 ECH | GREASE、過期設定或不支援套件 |
| 直連成功但 CONNECT 失敗 | 代理協定支援、目標可達性與政策 |
| 首次交握重試、第二次成功 | 設定輪替與驗證過的重試證據 |
| 頁面載入但沒有新 TLS 事件 | 連線重用或工作階段恢復 |
| 代理失敗後直連成功 | 繞過或回退政策違規 |
| 檢查路徑行為不同 | 檢查相容性與受管用戶端政策 |
GeoDNS 一致性測試可協助區分地區答案漂移與 ECH 設定問題。
常見問題
ECH 會讓明確代理看不到目標嗎?
不一定。即使後續 TLS ClientHello 的 SNI 受保護,明確代理仍可能從 CONNECT authority 收到目標主機名稱,必須依實際應用到代理協定判斷。
擷取封包看到 ECH 擴充足以證明成功嗎?
不足。它可能只是 GREASE。應確認使用真實設定,並取得用戶端或服務端接受證據。
為隔離 ECH 錯誤可以停用憑證驗證嗎?
不可以。憑證、主機名稱與 ECH 檢查保護不同屬性,應保持驗證開啟並使用受控憑證。
更換代理出口能修復過期 ECH 設定嗎?
只有當路由確實改變解析器或目標邊緣證據時才可能影響結果,且必須解釋原因。隨機輪替不是修復,應直接診斷 DNS、設定年齡與重試。
合規說明
只測試自己擁有或獲授權評估的目標、DNS 區域、用戶端與代理設施。遵守網路政策、隱私義務與供應商條款。不得利用 ECH 測試繞過存取控制、隱藏被禁止活動,或在未獲授權時削弱合規檢查。