GitHub 停用 HTTPS SHA-1:依賴代理的團隊現在應測試什麼

GitHub 於 2026 年 9 月 15 日宣布,已在 GitHub.com 與合作 CDN 停用 HTTPS SHA-1,範圍包括 GitHub Enterprise Cloud 及其資料駐留服務;GitHub Enterprise Server 不受影響。這是傳輸相容性變化,不是 Git 提交識別碼規則變化。
現代瀏覽器、Git 用戶端與 TLS 函式庫通常已支援新式憑證簽章。風險較常出現在舊執行映像、過期信任庫、TLS 檢查閘道,或會替換憑證鏈的代理設備。以代理執行 CI、相依套件下載、資料蒐集或儲存庫自動化的團隊,需要測試完整路徑,不能以一次直連瀏覽器成功代替真實工作負載驗證。
先釐清變更邊界
此次退役針對連線 GitHub 託管服務時 HTTPS 內的 SHA-1,不代表儲存庫突然不能使用 SHA-1 物件名稱,也不要求重寫 Git 歷史。事件紀錄應標示失敗發生在 DNS、代理驗證、CONNECT、TLS 驗證、重新導向或 Git HTTP 操作。
記錄用戶端版本、TLS 後端、信任庫版本、代理路由別名、目標主機、位址族、協商 TLS 版本、憑證簽章演算法、簽發者指紋、HTTP 狀態與失敗階段。代理密碼、權杖、Cookie 及可辨識內部設施的憑證細節必須雜湊或遮蔽。
建立直連與代理矩陣
針對同一個自有或已獲授權的儲存庫分別測試:
- 直連;
- 每個生產 HTTP 或 HTTPS 代理閘道;
- 自動化使用的每條 SOCKS5 路由;
- 已採購的 IPv4 與 IPv6 路徑;
- 新連線與重用連線;
- 目前及最舊仍受支援的用戶端映像。
固定儲存庫、命令與逾時。若直連成功而代理路徑在 TLS 階段失敗,應優先檢查閘道、檢查憑證鏈或代理用戶端的信任設定,而不是籠統判斷 GitHub 不可用。
分離 CONNECT 與憑證驗證
使用 HTTPS 代理時,先確認代理驗證成功,CONNECT 隧道到達正確主機與連接埠,再檢查隧道內呈現的憑證鏈。若直連和代理的簽發者不同,應記錄該路由存在 TLS 檢查,並確認此行為已獲授權。
可搭配HTTPS 代理 TLS 憑證鏈稽核比較葉憑證、中繼憑證與根憑證,再用代理 TLS 檢查稽核區分合規檢查閘道和意外憑證替換。
測試真實操作
首頁請求只能算基本檢查。先執行唯讀流程:
- 解析並連線必要的 GitHub 主機;
- 完成代理驗證與 TLS 協商;
- 擷取一個小型已授權儲存庫或讀取遠端參照;
- 從工作流程實際使用的 CDN 路徑下載一個發布資產或相依套件;
- 在連線重用及 DNS 快取到期後重複;
- 唯讀通過後,再於非生產儲存庫測試已授權寫入。
逐一驗證重新導向目的地,不要因錯誤頁就擴大代理允許清單;應從成功基線取得真實且已獲授權的主機集合。
快速歸因
| 現象 | 優先檢查 |
|---|---|
| 直連成功,代理在 TLS 前失敗 | 代理驗證、CONNECT 政策、DNS 或出口規則 |
| 僅一個閘道憑證驗證失敗 | 檢查憑證鏈、舊根憑證或舊簽章演算法 |
| 瀏覽器正常,CI 映像失敗 | 舊 TLS 函式庫、缺少根憑證或不同代理設定 |
| Git 中繼資料正常,資產失敗 | CDN 主機允許清單、重新導向或獨立代理路由 |
| 僅部分出口間歇失敗 | 閘道叢集、區域憑證鏈或路由設定不一致 |
不得以關閉憑證驗證來「修復」問題。這會掩蓋根因並增加憑證暴露風險。
驗收與修復
只有當直連和代理路徑皆使用支援的 TLS、驗證現代憑證鏈、到達全部必要主機、正確處理重新導向,並在無不安全繞過的情況下完成真實唯讀流程,才能核准該用戶端與路由。結果應依用戶端映像及閘道分開統計。
舊用戶端失敗時,優先更新執行環境、TLS 函式庫與信任庫;若合規檢查設備簽發舊鏈,應更換或重新設定設備。任何暫時繞過都必須限定範圍、設定期限並由安全負責人複核。
發布檢查清單
- 確認問題屬於 HTTPS 傳輸,而非 Git 物件識別碼。
- 分別測試直連、HTTP 代理與 SOCKS5。
- 納入最舊仍受支援的 CI 或蒐集映像。
- 記錄 TLS 後端、信任庫與協商協定。
- 比較直連與代理憑證簽發者。
- 同時測試儲存庫中繼資料與必要 CDN 資產。
- 不盲目擴大主機允許清單。
- 全程保持憑證驗證開啟。
- 日誌中不保留憑證與原始權杖。
- 關閉事件前重測全部生產閘道。
常見問題
是否需要把現有儲存庫全部轉離 SHA-1?
不需要。公告針對 HTTPS 中的 SHA-1,不是現有 Git 歷史內的物件識別碼。
為什麼瀏覽器正常而 Git 失敗?
兩者可能使用不同 TLS 函式庫、信任庫、代理設定與憑證檢查政策。必須測試實際執行任務的用戶端映像。
應先更換代理供應商嗎?
通常不應。先定位用戶端、信任庫、閘道、檢查鏈、主機政策或路由內的具體故障點,再依證據決定。
能否暫時關閉憑證驗證?
對含驗證資訊的 Git 流量,這不是安全診斷方式。應擷取憑證鏈證據並修復信任或閘道設定。
合規說明
僅測試自有或已獲授權的儲存庫、資產與代理路由。遵守 GitHub 存取控制、組織檢查政策、速率限制和隱私要求。不得在公開日誌暴露憑證、儲存庫祕密或私有憑證材料。