Android 憑證資訊公開政策

如有任何關於本政策的問題,請前往 CT 政策論壇: ct-policy@chromium.org

如果應用程式選擇加入憑證透明度,系統會在應用程式中驗證連線的傳輸層安全標準 (TLS) 憑證,並評估是否符合 Android 憑證透明度 (CT) 政策。如果憑證附有符合這項政策的簽署憑證時間戳記 (SCT),即為 CT 相容憑證。

如要符合 CT 規定,憑證和隨附的 SCT 必須符合熱門 TLS 程式庫 (包括內建的 Conscrypt) 在憑證驗證期間強制執行的技術規定,這些規定定義於本政策中。

CT 記錄狀態

Android 裝置會評估 CT 記錄中的 SCT,並確保這些記錄在檢查時處於正確狀態,藉此判斷是否符合 CT 規範。CT 記錄可能處於下列狀態:

  • Pending
  • Qualified
  • Usable
  • ReadOnly
  • Retired
  • Rejected

為協助您瞭解 Android 中 CT 法規遵循的相關規定,Chrome 說明文件的 CT 記錄生命週期說明詳細說明瞭這些狀態的定義、各狀態的記錄規定,以及這些狀態對 Android 行為的影響。

符合 CT 規定的憑證

如果 TLS 憑證隨附一組 SCT,且這組 SCT 至少符合稍後定義的其中一項條件 (視 SCT 傳送至 Android 的方式而定),則該憑證即為 CT 相容憑證。在 Android 的 CT 強制執行應用程式中,所有公開信任的 TLS 憑證都必須符合 CT 規定,才能成功驗證;不過,未記錄至 CT 或 SCT 不足的憑證,不視為錯誤核發。

評估憑證是否符合憑證透明化規定時,Android 會考量多項因素,包括 SCT 的數量、核發 SCT 的憑證透明化記錄檔營運者,以及核發 SCT 的憑證透明化記錄檔在憑證驗證時和 SCT 建立時的狀態。

視 SCT 向 Android 呈現的方式而定,只要符合下列其中一項條件,即可達到 CT 規範:

內嵌 SCT:

  1. 檢查時,至少有一個來自憑證透明化記錄的內嵌 SCT 處於 QualifiedUsableReadOnly 狀態;且
  2. 至少有 N 個不同憑證透明化記錄的內嵌 SCT 在檢查時為 QualifiedUsableReadOnlyRetired,其中 N 定義於下表;且
  3. 在符合條件 2 的 SCT 中,至少有兩個 SCT 必須由 Android 認可的不同 CT 記錄運算子核發;且
  4. 在符合規定 2 的 SCT 中,至少須有一個 SCT 是由 Android 認可的記錄檔核發,且該記錄檔符合 RFC 6962 規定
憑證生命週期 來自不同 CT 記錄的 SCT 數量
<= 180 天 2
超過 180 天 3

透過 OCSP 或 TLS 傳送的 SCT:

  1. 檢查時,憑證透明化記錄至少要有兩個 SCT,且狀態為 QualifiedUsableReadOnly;以及
  2. 在符合條件 1 的 SCT 中,至少有兩個 SCT 必須由 Android 認可的不同 CT 記錄運算子核發;且
  3. 在符合條件 1 的 SCT 中,至少要有一個 SCT 是由 Android 認可的 CT 記錄所核發,且該記錄符合 RFC6962 規範。

無論是內嵌 SCT,還是透過 OCSP 或 TLS 傳送的 SCT,只要在記錄清單的運算子部分有獨立項目,即視為記錄運算子獨一無二。

在極少數情況下,CT 記錄會在生命週期內變更運算子,CT 記錄可選擇性地包含 previous_operators 清單,以及先前運算子運作此記錄的最終時間戳記。為避免記錄運算子變更導致現有憑證失效,系統會比較 SCT 時間戳記與 previous_operators 時間戳記 (如有),判斷 SCT 核發時的記錄運算子。

重要注意事項

只要握手中顯示的 SCT 組合符合上述其中一項 CT 規範條件,額外的 SCT (無論狀態為何) 就不會影響憑證的 CT 規範狀態。

如要為憑證的 CT 遵循情形做出貢獻,SCT 必須在記錄的 Retired 時間戳記 (如有) 之前核發。Android 會使用所有 SCT 中最早的 SCT,根據 CT 記錄 Retired 時間戳記評估 CT 相容性。這是為了因應邊緣情況,也就是在提交憑證記錄要求期間,CT 記錄遭到淘汰。

「內嵌 SCT」是指透過憑證本身的 SignedCertificateTimestampList X.509v3 擴充功能傳送的 SCT。許多 TLS 伺服器不支援 OCSP Stapling 或 TLS 擴充功能,因此 CA 應準備好將 SCT 嵌入核發的憑證,確保 Android 順利驗證或處理 EV。

如何將 CT 記錄新增至 Android

如要瞭解 CT 記錄如何成為 Qualified,以及在哪些情況下會變成 Retired,請參閱 Chrome CT 記錄政策

CT 執行逾時

Google 每天都會發布新的 CT 記錄清單,其中包含新的log_list_timestamp。Android 裝置每天會嘗試下載最新版本的清單,以進行驗證。如果裝置上沒有記錄清單,或記錄清單的時間戳記超過 70 天,系統就會停用 CT 強制執行功能。這項逾時設定可為 CT 生態系統提供重要保障,確保新的 CT 記錄在成為 Qualified 後,能在固定時間內安全轉換為可用狀態。

Android 記錄清單

Android 記錄清單會發布在 log_list.json 中,且每天都會更新。 這份記錄清單不提供穩定的 API、服務水準協議或可用性保證。

Android 會提供 CT 記錄清單,供憑證提交者 (例如認證授權單位) 和 CT 監控人員與稽核人員使用,以便與 CT 和 WebPKI 生態系統保持相容,或調查相關內容。

未經授權就依賴 Android CT 記錄清單,不僅會危害使用者,也會危害 Android 使用者和整個 CT 生態系統。如果您正在探索如何在應用程式中加入 CT 強制執行功能,請使用 Android 平台支援的機制

如果使用 Android CT 記錄清單時違反這項政策,您必須自行承擔風險,且可能導致應用程式或程式庫損壞。Android 必須能夠因應 CT 生態系統中的事件,變更 CT 記錄清單,以維護 Android 使用者的安全。Android 可能會採取措施,確保第三方對 CT 記錄清單的依附元件不會影響 Android 因應這類事件的能力,包括未經公告就變更記錄清單,以中斷未經授權的使用行為。