跳至主要內容
返回技術博客

· 約 3 分鐘閱讀 ·

eMudhra 中繼 CA 私鑰外洩:你的網站沒用它,也該檢查伺服器的信任清單

10 月 17 日,研究人員發現 eMudhra 八張中繼 CA 憑證的私鑰可以直接從公開憑證算出來,瀏覽器數小時內封鎖、Chrome 與 Mozilla 隨後移除根憑證。瀏覽器已經沒事,真正要檢查的是你的伺服器、容器和 CI 裡的信任清單。

  • 資安
  • TLS 憑證
  • 供應鏈安全
  • 趨勢
本文目錄
  1. 一、到底發生什麼事
  2. 二、為什麼維運團隊還要管
  3. 三、兩種人要做的事
  4. 四、檢查清單
  5. 五、我的看法

eMudhra 中繼 CA 私鑰外洩

10 月 17 日,一位研究人員向各大根憑證計畫回報:印度憑證機構 eMudhra 有八張中繼 CA 憑證的私鑰可以被還原。Mozilla 在 安全部落格 與 Bugzilla 事件單 公開了經過,Google 也發了 Chrome 與 Android 的說明。

拿到中繼 CA 私鑰的人,可以替任何網域簽出瀏覽器會接受的憑證。這不是某個網站出事,而是整個 HTTPS 信任鏈的一環出事。

一、到底發生什麼事

  • 八張受影響的中繼憑證:6 張用於 TLS、2 張用於程式碼簽章,都是 2025 年 4 月 30 日同一批產生的 P-384 金鑰。
  • Mozilla 的調查指出,這八把私鑰都是小於 256 的整數。也就是說,只要有公開的憑證,就能幾乎瞬間算出私鑰。Mozilla 工程師沒有任何提示也能獨立還原。
  • 時間線(UTC):10/17 18:05 Chrome 收到回報,19:45 透過 CRLSet 封鎖;Mozilla 20:06 收到回報,22:59 完成 OneCRL 封鎖。10/18 eMudhra 撤銷八張憑證,10/19 Sectigo 撤銷交叉簽章。
  • 10/20 Mozilla 發布 NSS 3.131.1,移除簽出這些中繼憑證的根憑證 emSign ECC Root CA - G3;Chrome Root Store 的移除則預計在 10/27(美西時間)推到使用它的裝置。
  • eMudhra 在 Bugzilla 估計約 30,000 張憑證要遷移,其中約 97% 透過 ACME 簽發;10/28 的官方更新則宣布逐步退出公開信任的 TLS 憑證業務。

好消息是:Google 表示封鎖前,沒有任何從這些中繼憑證簽出的 TLS 憑證被記錄到 Certificate Transparency,所以會強制檢查 CT 的瀏覽器不會被偽造憑證騙過。

二、為什麼維運團隊還要管

瀏覽器有自動更新的封鎖機制,但你的伺服器不是瀏覽器。

後端呼叫第三方 API、webhook、爬蟲、CI 下載套件,用的是作業系統的 ca-certificates、語言執行環境自帶的信任清單(例如 Python 的 certifi),或容器映像裡凍結的那一份。很多非瀏覽器用戶端也不檢查 CT。

社群整理的追蹤頁在 10/28 補充:macOS 上 Apple 的開發工具(git、curl、python3)當時仍信任這些憑證。換句話說,修補進度在不同元件之間差很多,不能假設「瀏覽器沒事就沒事」。

三、兩種人要做的事

A. 網站憑證是 eMudhra/emSign 簽發的:根憑證已被移除,要立刻換到其他 CA。

B. 其他所有人:更新伺服器、容器與開發機的信任清單。

# 1. 看自己網站憑證的發行者(找 emSign / eMudhra)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -issuer

# 2. 測試用戶端是否還信任被封鎖的中繼憑證(應該連線失敗才對)
curl -sS -o /dev/null https://dv-g3b-emudhra.we-have-a-problem.com/ \
  && echo "仍然信任,需要更新" || echo "已拒絕(若是網路問題請再確認)"

# 3. Debian / Ubuntu 主機或容器
apt-get update && apt-get install --only-upgrade ca-certificates

# 4. Python 專案
pip install -U certifi   # 2026.10.19 之後的版本已處理

四、檢查清單

  • 盤點自己所有網域(含 API、內部服務對外的端點)的憑證發行者
  • 伺服器與 CI runner 更新 ca-certificates
  • 重建 Docker 映像,不要只更新主機;舊映像裡的信任清單不會自己變
  • Node.js 升到 10/21 安全更新的版本(v26.12.1/v24.22.1/v22.23.4),官方公告已包含這次的 CA 更新
  • Python 專案更新 certifi;Java 記得它有自己的 cacerts
  • 用上面的測試網址,從正式環境實際跑一次 curl
  • 有 TLS 攔截代理的環境,檢查的是代理的信任清單,不是用戶端

五、我的看法

這次事件提醒的是:信任清單也是相依套件。我們習慣盯 package.json 和 lockfile,卻很少有人知道正式環境的容器裡那份 CA bundle 是哪一天的版本。

另一個值得注意的數字是 97% 透過 ACME 簽發。憑證自動化讓「換一家 CA」從專案變成設定,這次受影響的網站能不能快速脫身,很大程度取決於當初有沒有做自動化。如果你的憑證還是一年手動換一次,現在是改掉的好時機。

想把憑證、信任清單和基礎映像的更新排進固定的維運節奏,可以預約 30 分鐘初談。

SUBSCRIBE

新文章寄到你的信箱

每月約 2–4 篇,主題是 AI 導入、Web 工程與維運。只在有新文章時寄出,隨時可以退訂。

送出後會收到一封確認信,點擊確認才會開始寄送。確認信可能被歸到垃圾郵件,請留意一下。

用 RSS 訂閱

習慣用 Feedly、Inoreader 或其他閱讀器?加入這個網址即可。

https://www.8plus.app/feed.xml
開啟 RSS

想把文章裡的想法落地?

預約一場諮詢,讓我們針對你的系統與流程一起討論可行的做法。