Apple 的雲端管理簽名證書會在新簽名請求距離到期約 90 天時自動建立新證書;Account Holder 或 Admin 也可以在符合條件時主動輪換。這代表企業不應等證書失效後才處理:本週先盤點證書與責任人,提前建立新身份,完成 Provisioning Profile、Keychain 和真實發布驗證,確認新舊流水線可切換後再撤銷舊證書。若私鑰疑似泄露,則優先止損,不能為了維持構建而延遲撤銷。 Apple 雲端管理證書說明
本週建議動作: 建立證書資產表,指定 Account Holder/Admin、CI 平台、發布、安全及基礎設施負責人,並為每張證書補上指紋、Team、用途、關聯 App、構建節點與計劃撤銷對象。
SECTION 01 誰需要參與這次 iOS 簽名證書輪換?
這篇文章適合三類決策者:
- 管理 Apple Developer 帳號、簽名權限和證書生命週期的企業 IT 管理員。
- 維護 iOS CI/CD、Keychain、Xcode 和 Mac 構建節點的平台工程團隊。
- 需要批准發布切換、應急撤銷和審計證據的研發負責人或安全負責人。
這不是單純的「下載新證書」工作。企業真正要驗收的是:新身份是否進入正確的受控環境、每台 Mac 是否能使用私鑰、Profile 是否與 App ID 和 Entitlements 匹配,以及失敗時是否能回到可用的舊流程。
SECTION 02 先按證書用途劃定輪換邊界
Apple 將簽名證書分成不同用途;Apple Distribution 主要用於分發 iOS 等平台應用程式,或將版本上傳至 App Store。Distribution 證書屬於團隊資產,而不是某一位開發者的個人資產;在組織帳號中,建立 Distribution 證書需要 Account Holder 或 Admin 權限。 Apple 證書總覽
不要把所有證書混成一個「即將到期」項目,建議先建立以下資產表:
| 資產欄位 | 你需要記錄的內容 | 輪換驗收證據 |
|---|---|---|
| 證書身份 | 類型、名稱、指紋、到期狀態 | Apple Developer 截圖或匯出記錄 |
| 使用範圍 | Team、Bundle ID、App 名稱、分發方式 | App ID 與專案設定對照 |
| 構建位置 | Mac 節點、CI 工作區、Keychain 名稱 | 節點逐台核對結果 |
| 私鑰狀態 | 是否存在、是否可用、誰可存取 | 簽名測試與存取記錄 |
| Profile 關聯 | Profile 名稱、App ID、證書、Entitlements | 重新生成及下載記錄 |
| 責任人 | IT、CI 平台、發布、安全、基礎設施 | RACI 簽核與交接時間 |
| 撤銷計劃 | 舊證書、撤銷批准人、回滾條件 | 撤銷前後的驗收表 |
Apple 官方指出,證書到期或撤銷的影響取決於證書用途。App Store 上已存在的 iOS 應用程式,在會員資格有效的前提下通常不會因此受影響,但你不能再用已到期或已撤銷的證書上傳新版本;企業內部分發則可能需要重新簽署並部署新版本。 Apple 證書支援說明
因此,第一個里程碑不是「新證書已建立」,而是確認你管理的是哪一條分發鏈路:
- App Store/TestFlight:重點是新版本 Archive、Export 和上傳驗證。
- 企業內部分發:重點是現有使用者是否仍能執行,以及新版本是否已準備好重新簽署。
- Ad Hoc 測試:重點是裝置清單、Profile、App ID 和新證書是否一致。
- macOS Developer ID:不能套用 iOS Distribution 的影響判斷,應按 Developer ID 證書及 Profile 規則另行驗收。
注意: 證書到期和證書撤銷不是同一種事件。若只是正常到期,可以先建立新身份並完成重疊驗證;若私鑰疑似泄露,應立即限制存取、保留事件證據並啟動緊急撤銷,不應沿用一般輪換節奏。
SECTION 03 Apple Developer 權限應如何分工?
Apple 的角色權限要先於 CI 設定。Account Holder 負責會員、法律協議和團隊級帳號控制;Admin 可執行許多證書與 Profile 管理工作;Developer 是否能使用雲端管理證書,還取決於團隊授予的額外權限。 Apple Developer 角色與存取權限
建議用以下 RACI 邊界管理交接:
- Account Holder: 批准團隊級風險、確認撤銷策略,必要時處理最高權限變更。
- Admin: 建立或撤銷 Distribution 證書、管理 Profile,保存操作記錄。
- CI 平台負責人: 安裝證書及私鑰,管理 Keychain 解鎖、工作區清理和日誌脫敏。
- 發布負責人: 執行 Archive、Export、TestFlight 或 App Store 上傳驗證,確認 Bundle ID 與版本設定。
- 安全負責人: 審查私鑰接觸範圍、撤銷依據、事件範圍和審計證據。
- 基礎設施負責人: 驗收 Mac 節點的隔離、遠端管理、重啟恢復和備用容量。
不要將 Account Holder 密碼或高權限登入狀態放在 CI 節點。Apple 也將帳號憑證、證書和相關材料列為敏感資產,並明確提醒不要在組織外分享證書。
雲端管理證書適合希望由 Xcode 和 Apple 服務管理簽名的流程;本地簽名身份則要求新證書及私鑰進入構建環境。若 CI 使用手動簽名、固定的 ExportOptions 或自訂腳本,你必須明確知道是哪一種身份在完成簽名,不能因 Xcode 可以自動簽名,就假設所有流水線都已切換。 Xcode 發布流程說明
SECTION 04 Keychain 與 Mac 構建節點要怎樣驗收?
每個構建節點都應被視為獨立的簽名邊界。新證書可以放入專用 CI Keychain 或等效的受控密鑰環境,但不應透過聊天工具、公共目錄、未加密的工件儲存區或共享桌面分發。
在平台工程團隊交接前,至少逐項檢查:
- 新證書的 SHA-256 指紋是否與資產表一致。
- 證書是否同時擁有可用的對應私鑰。
- CI 使用的簽名身份是否沒有被舊名稱、舊指紋或預設 Keychain 覆蓋。
- Keychain 在非互動式構建中能否安全解鎖。
- 構建帳號是否只有必要的讀取或使用權限。
- 臨時
.p12、Profile 和匯出檔案是否在工作完成後清理。 - CI 日誌是否會輸出密鑰內容、完整路徑或敏感環境變數。
- 節點重啟後,Keychain 和必要憑證是否能按既定流程恢復。
- 所有 Mac 節點是否都完成同一組 Archive 和 Export 測試。
對多台 Mac 而言,最容易被忽略的是「節點漂移」:一台新節點可能使用雲端管理簽名,另一台舊節點仍使用本地 Apple Distribution 證書;主分支在其中一台成功,不代表生產池已完成輪換。
SECTION 05 Provisioning Profile 更新與發布驗證
Provisioning Profile 不是單純的下載檔案。Apple 說明指出,Profile 會包含單一 App ID 及分發證書;如果證書被撤銷,包含該證書的 Profile 會失效,需要重新編輯或生成。 Apple Provisioning Profile 更新說明 編輯及重新生成 Profile
發布負責人應在隔離驗證節點或非關鍵分支執行完整鏈路:
- 在 Apple Developer 建立新證書,保存證書名稱、指紋、Team 和申請人。
- 按 App ID、分發類型和新證書重新生成 Provisioning Profile。
- 將 Profile 安裝到指定 Mac,確認 Xcode、Keychain 和 CI 帳號均能讀取。
- 檢查專案的 Bundle ID、Team、Signing Certificate、Entitlements 和 ExportOptions。
- 執行一次乾淨構建,避免舊工作區殘留的 Profile 或簽名身份掩蓋問題。
- 完成 Archive,確認簽名身份和 Profile 出現在可核驗的構建證據中。
- 執行 Export,驗證輸出工件可被預期的測試裝置或發布流程接受。
- 按企業既定流程上傳至 TestFlight、App Store Connect 或內部分發渠道。
- 保存構建編號、提交結果、節點、證書指紋、Profile 名稱和失敗日誌摘要。
- 在新流程成功後,再決定舊身份是否可撤銷。
Xcode 的自動簽名可以減少手動維護,但對企業 CI/CD 而言,仍要驗證實際使用的簽名路徑。Apple 官方發布文件也區分了自動管理簽名和手動使用簽名證書的流程;如果你的流水線依賴固定 Profile 或專用 Keychain,就應將這些設定列入驗收,而不是只在 Xcode 介面中確認選項。 Xcode 分發與簽名流程
SECTION 06 可勾選的上線驗收清單
以下清單適合由發布、安全和基礎設施負責人共同簽核:
- [ ] 已完成全部 Distribution、Development、Ad Hoc 及相關特殊證書的盤點。
- [ ] 每張證書已有指紋、Team、用途、關聯 App、節點和責任人。
- [ ] 新證書由 Account Holder 或 Admin 按權限建立,申請和批准記錄完整。
- [ ] 私鑰沒有透過聊天工具、公共目錄或未受控工件儲存區傳遞。
- [ ] 新證書已安裝於專用 CI Keychain 或等效受控密鑰環境。
- [ ] 每台 Mac 都已核對證書指紋與私鑰可用性。
- [ ] 每台 Mac 都已安裝正確的 Provisioning Profile。
- [ ] Bundle ID、Team、Entitlements 和 Profile 已逐項對照。
- [ ] 已完成乾淨 Archive、Export 及實際上傳或安裝驗證。
- [ ] 已保存構建編號、節點、證書指紋、Profile 名稱和結果。
- [ ] 已在至少一個隔離節點確認失敗處置與回滾路徑。
- [ ] 未經完整驗證,不會刪除或撤銷舊簽名身份。
- [ ] 撤銷前已確認沒有仍依賴舊證書的生產流水線。
- [ ] 撤銷後已重新檢查相關 Profile 是否失效,並按需要重新生成。
- [ ] 若存在私鑰泄露跡象,已切換至緊急撤銷和事件處理流程。
Apple 官方規定,撤銷 Distribution 證書需要 Account Holder 或 Admin;而包含已撤銷證書的 Provisioning Profile 會失效。這就是為何「新證書已建立」不能直接等同於「舊證書可以撤銷」。 Apple 撤銷證書說明 Apple 撤銷權限參考
SECTION 07 撤銷決策:正常到期與疑似泄露要分開處理
正常到期輪換可以採用「先建立、再驗證、後撤銷」的重疊策略。你要先確認所有生產節點、新 Profile、發布工件和回滾證據,再由安全負責人批准撤銷舊證書。
疑似泄露則不同。需要先判斷私鑰可能接觸過哪些節點、帳號、工件和人員;在完成基本事件記錄後,按 Apple 的撤銷能力及企業事件流程止損。對於 App Store 分發,既有上架版本與新版本上傳的影響不同;對於企業內部分發,舊版本能否繼續運行及重新部署的風險也不同,不能以 App Store 的判斷套用到所有場景。
提醒: 不要把「撤銷後重新生成 Profile」留到發布失敗才做。只要撤銷操作可能使現有 Profile 失效,就應在撤銷前準備好新 Profile、節點部署方案和可核驗的重新簽署路徑。
完成驗收後,你還要檢查現有 Mac 構建環境是否具備獨立驗證節點、完整 root 權限、遠端恢復、重啟後 Keychain 恢復,以及發布高峰期間的備用容量。直接在生產構建機上操作,容易把測試失敗與正式發布混在一起;臨時增加雲端 Mac 節點則可能帶來密鑰交付、權限隔離和資料清理責任。若你缺少隔離測試資源,可以先查看 VPSNIX 的遠端 Mac 服務資訊,再按 方案與租期頁面 評估是否需要按週或按月部署專用驗證節點。
SECTION 08 常見問題
iOS Distribution 證書到期前,企業應該怎樣更換?
不要等到到期日才處理。由 Account Holder 或 Admin 建立新簽名身份,將對應的 Provisioning Profile 重新生成並部署到隔離的 Mac 構建節點,再完成 Archive、Export、上傳與灰度驗證。只有在新舊流水線均可用、證據已保存且回滾路徑成立後,才批准撤銷舊證書。
CI/CD 更換簽名證書後,Provisioning Profile 要怎樣更新?
Provisioning Profile 會綁定 App ID、簽名證書及相關能力設定。更換證書後,應在 Apple Developer 重新編輯或生成對應 Profile,下載至每台構建 Mac,並檢查 Bundle ID、Entitlements、Team ID 與簽名身份是否一致。若舊證書已撤銷,包含它的 Profile 會失效,不能只替換 Keychain 內的證書。
多台 Mac 構建機如何同步新的簽名證書?
不要以單台 Mac 構建成功代表全部節點完成輪換。每台節點都要在專用 Keychain 或受控密鑰環境安裝新證書與私鑰,核對指紋、私鑰可用性、Profile 狀態及解鎖權限,再執行一次實際 Archive 與 Export。同步完成後,應保存節點編號、指紋、驗證結果及清理記錄。
撤銷 Apple Distribution 證書會影響已上架應用程式嗎?
對 App Store 上現有應用程式,Apple 官方說明指出,若會員資格仍有效,已上架版本不會因 iOS Distribution 證書到期或撤銷而受影響;但你不能再使用該證書上傳新版本或更新。若是企業內部分發,受影響範圍不同,已用該證書簽署的應用程式可能需要重新簽署並部署。
如果你目前直接在生產 Mac 上輪換,常見缺點是沒有隔離驗證空間、失敗時會干擾正式流水線,而且多台節點的 Keychain 狀態難以逐一追蹤;若完全依賴單一長期自購 Mac,又要自行承擔硬體故障、遠端恢復和閒置成本。當你只需要臨時驗證節點、發布高峰備用容量或按週/按月擴充的 Mac 構建環境時,租用具備 root 權限和遠端管理能力的 Mac,通常比把未驗證的簽名變更直接推進生產更容易控制風險。可先從 VPSNIX 的遠端 Mac 申請頁面 檢查是否符合你的輪換與驗收安排。
SECTION 09 常見問題 FAQ
iOS Distribution 證書到期前,企業應該怎樣更換?
不要等到到期日才處理。由 Account Holder 或 Admin 建立新簽名身份,將對應的 Provisioning Profile 重新生成並部署到隔離的 Mac 構建節點,再完成 Archive、Export、上傳與灰度驗證。只有在新舊流水線均可用、證據已保存且回滾路徑成立後,才批准撤銷舊證書。
CI/CD 更換簽名證書後,Provisioning Profile 要怎樣更新?
Provisioning Profile 會綁定 App ID、簽名證書及相關能力設定。更換證書後,應在 Apple Developer 重新編輯或生成對應 Profile,下載至每台構建 Mac,並檢查 Bundle ID、Entitlements、Team ID 與簽名身份是否一致。若舊證書已撤銷,包含它的 Profile 會失效,不能只替換 Keychain 內的證書。
多台 Mac 構建機如何同步新的簽名證書?
不要以單台 Mac 構建成功代表全部節點完成輪換。每台節點都要在專用 Keychain 或受控密鑰環境安裝新證書與私鑰,核對指紋、私鑰可用性、Profile 狀態及解鎖權限,再執行一次實際 Archive 與 Export。同步完成後,應保存節點編號、指紋、驗證結果及清理記錄。
撤銷 Apple Distribution 證書會影響已上架應用程式嗎?
對 App Store 上現有應用程式,Apple 官方說明指出,若會員資格仍有效,已上架版本不會因 iOS Distribution 證書到期或撤銷而受影響;但你不能再使用該證書上傳新版本或更新。若是企業內部分發,受影響範圍不同,已用該證書簽署的應用程式可能需要重新簽署並部署。