curl 8.22 修正 mbedTLS:關閉對端驗證時仍執行主機名稱驗證

curl 8.22 修正了 mbedTLS 後端的一條重要驗證路徑:當應用程式關閉對端憑證鏈驗證、但仍要求檢查憑證主機名稱時,名稱不符不會再被一併清除。兩個選項因此恢復各自獨立的意義。

網際網路連線依序通過代理與來源站兩個身分檢查點,名稱不符的路徑在驗證邊界被阻止

curl 專案將此變更描述為「mbedtls: enforce verifyhost when verifypeer is disabled」。回歸案例同時設定「關閉對端驗證」與「啟用主機名稱驗證」,再讓伺服器出示簽發給另一名稱的憑證。修正前,該 mbedTLS 路徑可能回傳成功;修正後,名稱不符會保留並產生驗證錯誤。

對代理使用者來說,這不是邊緣細節。一次請求可能同時存在用戶端到 HTTPS 代理,以及通道內到來源站的兩層 TLS。若把兩層混成一個「憑證是否正常」的結論,就很容易誤判故障位置。

mbedTLS 後端實際修正內容

憑證驗證至少要分別回答兩個問題:

  • 憑證鏈是否符合目前的信任政策;
  • 憑證是否標示了用戶端原本要連線的主機名稱。

受影響的回呼在關閉對端驗證時清除了整組驗證旗標,其中也包含「憑證名稱不符」旗標。因此,即使應用程式仍啟用主機名稱驗證,該路徑也可能看不到錯誤。curl 8.22 改為只移除被明確關閉的檢查,讓名稱不符繼續向上傳遞。

這項修正不代表關閉憑證鏈驗證已經安全。正式環境通常應同時啟用憑證鏈與主機名稱驗證。異常組合只適用於受控相容性測試,不應成為長期繞過方式。

為何代理鏈路必須拆成兩層驗證

一般 HTTP 代理承載 HTTPS 通道時,用戶端會在通道建立後驗證目標站。HTTPS 代理則可能要求用戶端先驗證代理閘道,再於通道內獨立驗證來源站。

測試記錄應明確區分:

層級預期名稱信任資料主要排查對象
代理 TLS設定中的代理主機名稱面向代理的 CA 政策閘道部署或用戶端設定
來源站 TLS請求的目標主機名稱面向來源站的 CA 政策來源站、攔截鏈路或用戶端設定

代理握手成功不等於來源站身分正確。遇到穩定的主機名稱不符,也不應立即輪替住宅代理出口;這會把確定性的設定錯誤偽裝成隨機網路問題,並放大重試成本。

curl 8.22 安全測試矩陣

以下測試只應在自有或明確獲授權的系統執行,並使用隔離的測試憑證與非正式端點。

  1. 執行 curl --version,同時記錄 curl 版本與 TLS 後端。只有版本資訊並不足夠,本次變更針對 mbedTLS 建置。
  2. 先以名稱相符的憑證,在憑證鏈驗證與主機名稱驗證皆啟用時建立基準。
  3. 換成簽發給另一測試主機名稱的憑證,保持兩項驗證啟用,確認請求失敗。
  4. 在隔離回歸案例中,只關閉對端憑證鏈驗證,維持主機名稱驗證。curl 8.22 的 mbedTLS 建置仍應拒絕錯誤名稱。
  5. 針對 HTTPS 代理名稱與來源站名稱分別重複矩陣,並為每個結果標示 TLS 層。
  6. 分別測試新連線與可重用連線,避免把未重新握手誤判為測試通過。
  7. 完成後立即恢復嚴格驗證並移除暫時例外。

使用 libcurl 時,也應記錄來源站選項與代理專用選項的最終有效值。診斷日誌可保留目標別名、代理協定、錯誤碼與後端類型,但不可記錄代理密碼、工作階段權杖或完整授權標頭。

正確處理失敗,避免危險回退

主機名稱不符屬於身分驗證失敗,不是代理池容量不足。正確作法是停止受影響路徑、保存去識別化證據,並修正預期名稱、憑證部署或代理設定。

避免以下回退:

  • 在大量住宅出口重複相同的名稱不符請求;
  • 從 HTTPS 代理暗中降級為未加密代理傳輸;
  • 為了「請求成功」同時關閉兩項憑證檢查;
  • 未經政策核准而繞過代理直接連線;
  • 在彙總成功率時忽略身分驗證錯誤。

若升級後原本「成功」的請求開始失敗,應把它視為舊路徑可能接受錯誤身分的證據,優先修正憑證與主機名稱,而不是鎖定舊行為。

升級檢查清單

  • 盤點所有 curl/libcurl 執行個體與 TLS 後端。
  • 找出被關閉的憑證鏈或主機名稱驗證設定。
  • 區分代理 TLS 與來源站 TLS 的獨立設定。
  • 在預備環境加入故意錯誤主機名稱的測試。
  • 確認身分錯誤不會觸發出口輪替。
  • 確認日誌會遮蔽憑證、Cookie 與完整查詢參數。
  • 覆蓋連線重用、容錯移轉與復原路徑。
  • 正式環境保持兩項驗證啟用。

也可搭配憑證釘選缺失檢查代理閘道憑證到期處置手冊代理容錯移轉復原演練代理繞過稽核完成升級評估。

常見問題

curl 8.22 之後可以安全關閉對端驗證嗎?

不可以。主機名稱驗證只涵蓋身分判斷的一部分,關閉憑證鏈驗證仍會失去重要信任控制。

這項變更影響所有 curl TLS 後端嗎?

本次修正針對 mbedTLS。不同後端對異常組合的支援可能不同,因此必須記錄並直接測試實際後端。

主機名稱不符時應輪替代理 IP 嗎?

通常不應該。這類錯誤通常由 TLS 端點與預期名稱決定,輪替出口無法修復身分設定,反而會製造雜訊。

測試記錄應保留哪些資料?

保留 curl 版本、TLS 後端、有效驗證設定、TLS 層、去識別化端點別名、錯誤碼、時間與結論即可。不要保存密碼、授權標頭或原始使用者資料。

合規說明

僅對自有或已明確授權的基礎設施執行憑證與代理測試。正式流量應維持嚴格驗證,只收集必要診斷資訊,不得利用代理輪替繞過存取控制或掩飾未授權行為。