這頁的數字怎麼算
兩個時鐘、兩個信任庫、四類失敗。任何一個數字都可以用 openssl 與
/data/ 的 CSV 重算;方法頁只寫定義與已知缺口。
1. 換手空窗(CT 時鐘)
某 host 的最後一張舊 CA 憑證(HiPKI/GRCA)= L(取到期日 L.expiry)
某 host 在 L 之後的第一張新 CA 憑證(TWCA)= N
換手空窗 = N.notBefore − L.expiry ← 負值=新的先到(提前換好);正值=只有舊憑證的空窗
沒有任何 N 的 host = 還沒有新 CA 紀錄(可能仍用舊 CA,也可能該主機已下線)
目前分母 9138 個曾用舊 CA 的政府 host、完成 3437 (37.6%)、中位空窗 -49 天、P90 442 天、 提前換好 64.0%。 「沒有新 CA 紀錄」5701 台不能讀成「還在用舊 CA」, 因為它混進了已下線的主機;真正還在服務舊 CA 的數量由每日實測決定(首頁第二個數字)。
2. 信任裁決(兩個獨立裁判)
- apple:
openssl verify -CAfile apple_roots.pem,根憑證取自本機/System/Library/Keychains/SystemRootCertificates.keychain(158 張, 快照 b56413319de32344)。 - chrome:終端根的 SHA-256 是否出現在 Chromium
root_store.certs(95 張,快照 88fdf305210c64f1)。 - 兩份清單都會隨 OS/瀏覽器更新,所以每次探測都記錄當下的快照雜湊;跨日比較時不會偷偷換了裁判。
3. 失敗四分類
- expired:葉憑證
notAfter已過。 - no_intermediate:伺服器沒送中繼,鏈接不起來(不是憑證壞,是設定壞)。 ⚠️ 會做 AIA 補鏈的客戶端(Chrome 等)可能仍能建立連線,所以它與「過期」「根不受信任」不是同等嚴重,本站把它單獨計數。
- untrusted_root:鏈完整但終端根不在信任庫。
- probe_error:探測本身出錯(腳本、暫存、時間)。這一類不進任何比例。
3b. 期限、族譜與雙憑證
- 鏈上最短到期:對一台 host 的 served chain 取所有層的
notAfter最小值(不是只看葉憑證)。 「剩幾天」=該日期 − 今天。最先到期的是哪一層會標出來(葉/中繼/根)。 - 鏈的族譜:把今天所有鏈裡出現的中繼與根依
notBefore排序。同一個 CN 出現多個簽發日=那個 CA 重簽了自己的中繼,這是「換鏈」在憑證上唯一看得見的形式;公告日不算證據。 - 雙憑證(歷史):用 CT 判斷同一台是否曾同時持有一張舊 CA(HiPKI/GRCA)與一張 TWCA 憑證, 且兩張的效期有交集。有交集=當時真的可以切換;沒有交集=硬切,當天切不過去就沒有退路。
- 雙憑證(今天):同一台做兩次握手(預設 vs 只允許 ECDSA),看是否回兩張不同憑證。 這一格回答「現在有沒有第二條路」,與上面的歷史重疊不能相加。
4. 已知缺口
- CT 只有葉憑證的 issuer 名稱,看不到中繼鏈拓撲;所以「鏈層數」與「CYBER 新鏈」只從本站上線日起累積,不能回溯。
- 母體的政府名單來自二級網域展開的 CT 子樹查詢,不是官方完整清冊;seed 清單見
seeds.json,未涵蓋的機關不在分母裡。 - 民間/教育/網路 cohort 取 Tranco 前 100 萬名的樣本,不是全體;每張圖都印了 n 與排名上限。
- 每日探測走本機出口;換出口會改變可達率與延遲,所以不用 VPN 做例行探測。
4b. 數字的呈現規則
本站不單獨刊出任何一個「數量」:每個數量右側都給百分比,每個百分比都寫出分母與時間窗(例如「369 台(8.5% of 4,316 台可達)」)。 分母是哪一個(可達 host/探測到的 host/曾用舊 CA 的 host)會直接寫在旁邊,因為同一件事換一個分母就會換一個百分比。
5. 自己重算
curl -sO https://gov-ssl.sean-hsu.com/data/hosts.csv
openssl s_client -connect www.moe.gov.tw:443 -servername www.moe.gov.tw -showcerts \
| openssl x509 -noout -issuer -dates -fingerprint -sha256
本頁建置 9e7687177ea6;資料截至 2026-11-02。