Apple Certificate — 是什么、有哪些类型及工作原理

作者: IT Sectr 发布日期: 2026-04-16 阅读时间: 9 分钟

Apple Certificate 是由 Apple Developer Portal 颁发的数字文档,用于为 iOS、iPadOS、macOS、tvOS 和 watchOS 应用程序签名代码。根据 Apple Developer Support, 2026,证书是公钥基础设施 (PKI) 的一部分,对于确认开发者的身份至关重要。本文将介绍证书的类型、创建和管理过程。

要点

  • Apple Certificate — 在代码签名时验证开发者身份的数字证书
  • Development 证书允许在开发过程中在物理设备上运行应用程序
  • Distribution 证书用于在 App Store 发布或 Ad Hoc 分发
  • Push Notification 证书用于签名与 APNs 的连接并推送通知
  • 证书私钥 存储在开发者的 Keychain 中,不得泄露给第三方

什么是 Apple Certificate

Apple Certificate 是由 Apple 证书颁发机构 (Apple Certificate Authority) 颁发的 X.509 格式加密证书。它证明持有者是 Apple Developer Program 的注册成员,有权为 Apple 生态系统签名应用程序。证书由公钥、所有者元数据和 Apple CA 的数字签名组成 — 任何人都可以使用操作系统内置的 Apple 根证书来验证证书的真实性。

Apple PKI 架构包括三个层次:Apple 根证书 (Apple Root CA)、中间证书 (Apple Worldwide Developer Relations CA) 和开发者证书。Apple Worldwide Developer Relations CA 签名所有开发者证书 — 如果信任链中缺少此中间证书,代码签名将被视为无效。Apple 根证书通过内置于 iOS 和 macOS 中的 Apple Trust Store 机制自动更新。

每个证书都有有效期 — 从一年到三年,具体取决于类型。Apple Developer Program 会在证书到期前 30 天通过电子邮件和推送通知自动通知开发者。到期后,旧证书不能再用于签名新的构建版本 — 需要颁发新证书,但使用过期证书签名的应用程序仍可在用户设备上继续运行。

Apple 信任链

信任链 确保开发者证书确实由 Apple 颁发。iOS 会检查:Apple Root CA 根证书(内置于固件中)、Apple Worldwide Developer Relations CA 中间证书、开发者证书。如果信任链中任何元素缺失或无效,iOS 将阻止应用程序启动并显示代码签名错误。macOS 提供 security 工具来检查钥匙串中任何证书的信任链。

Apple 证书的工作原理

使用 Apple Certificate 进行代码签名的过程基于非对称加密。私钥 (private key) 存储在开发者计算机的 Keychain 中,而公钥 (public key) 则包含在证书中并发送到 Apple Developer Portal。当 Xcode 签署应用程序时,它会创建二进制文件的哈希值并使用私钥加密 — 这就是数字签名。设备使用证书中的公钥解密签名,并与计算出的哈希值进行比较。

Apple 对 2021 年后颁发的所有证书使用 ECDSA(椭圆曲线数字签名算法),采用 P-256 曲线。之前使用的是 RSA-2048。迁移到 ECDSA 提高了设备上的签名验证速度并减小了签名大小 — 对于移动应用程序来说,这尤为重要,因为每次启动时都会进行签名验证。根据 Apple Security Engineering (2025),ECDSA P-256 在计算成本显著降低的情况下提供了与 RSA-2048 同等的安全级别。

对于 CI/CD 流程,证书连同私钥需要导出为 PKCS12 (.p12) 格式并存储在安全存储中。GitHub Actions、Bitrise、Jenkins 和其他 CI 系统支持通过环境变量或密钥导入证书。导入到 CI 代理后,证书会临时添加到钥匙串中,用于签名,然后被删除。Fastlane Match 可自动执行此过程,通过加密的 git 存储库在开发者之间同步证书。

Development 和 Distribution 证书的区别

Development 证书允许签名应用程序以在开发者的物理设备上运行。获取它只需要一个免费的 Apple ID 帐户 — Xcode 可以自动生成 Development 证书。Distribution 证书仅针对付费的 Apple Developer Program 帐户(每年 99 美元)颁发,用于将应用程序提交到 App Store、Ad Hoc 分发或 Enterprise 分发。一个帐户可以有多个 Distribution 证书 — 例如,为每个应用程序或不同团队分别设置。

Apple Certificate 的类型

Apple Developer Portal 提供多种类型的证书,每种证书针对特定任务设计。iOS App Development — 开发阶段签名应用程序的基本证书。Apple Distribution — 在 App Store 发布的主要证书。Mac DevelopmentMac Distribution — 分别对应 macOS 应用程序。每种证书类型在 Apple Developer Portal 中都有单独的请求 (CSR)。

单独的一类是推送通知证书。Apple Push Notification service (APNs) 需要单独的 SSL 证书或使用身份验证令牌 (APNs Auth Key)。APNs SSL 证书分别针对 Development (Sandbox) 和 Production 环境颁发,并绑定到特定的 App ID。APNs Auth Key — 更现代的方法:一个密钥 (.p8) 服务于帐户的所有应用程序,简化了管理。

证书类型用途有效期
iOS App Development在设备上测试的签名1 年
Apple Distribution在 App Store 发布和 Ad Hoc1 年
Mac Development开发用 macOS 应用程序签名1 年
Mac Distribution在 Mac App Store 发布1 年
APNs SSL (Sandbox)测试环境中的推送通知1-3 年
APNs SSL (Production)生产环境中的推送通知1-3 年

创建和管理证书

创建 Apple Certificate 始于通过 macOS 上的 Keychain Access 生成证书签名请求 (CSR)。Keychain Access 会创建一对密钥:私钥保留在钥匙串中,CSR 发送到 Apple Developer Portal。身份验证后,Apple 签署 CSR 并颁发准备好的证书 (.cer),需要下载并双击安装。

为了管理多个项目和团队,Apple 允许为不同的 Team ID 创建证书。一个开发者可以成为多个团队的成员(通过 Apple Developer Program — App Store Connect),并且为每个团队颁发单独的证书。Xcode 会根据 Signing & Capabilities 设置中选择的团队自动切换证书。

吊销证书是一项关键操作:使用此证书签名的所有应用程序将无法再安装到新设备上(已安装的将继续运行)。Apple Developer Portal 允许在 Certificates 部分吊销任何证书。吊销原因:私钥泄露、开发者离开团队、违反 Apple Developer Program 条款。吊销后,需要颁发新证书并重新签名所有活动的构建版本。

Keychain 和证书导出

Keychain(钥匙串)— macOS 用于存储证书、私钥和密码的系统存储。所有 Apple 证书和相应的私钥都存储在用户的登录钥匙串 (login.keychain) 中。Xcode 在代码签名时访问 Keychain,根据构建类型自动选择合适的证书。要诊断签名问题,请使用内置的 Keychain Access 工具(位于 /Applications/Utilities 文件夹)。

为 CI/CD 导出证书通过 Keychain Access 完成:选择证书和相应的私钥(它们应在同一行中展开),右键单击并选择导出。格式为 PKCS12 (.p12)。导出时 Keychain 会要求输入密码以保护文件 — 此密码在 CI 服务器导入时将需要。没有私钥,导出的证书对签名毫无用处 — 只能用于验证已签名的代码。

在 CI/CD 中导入证书

使用 security 工具将证书导入 CI 代理钥匙串的示例命令:

bash
# 创建临时钥匙串
security create-keychain -p "temp" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "temp" build.keychain

# 从 .p12 导入证书
security import certificate.p12 -k build.keychain \
  -P "${P12_PASSWORD}" -T /usr/bin/codesign

# 配置签名策略
security set-key-partition-list -S apple: -s \
  -k "temp" build.keychain

Security create-keychain 创建与用户隔离的临时钥匙串。这对 CI 很重要,以免污染代理的系统钥匙串。-T /usr/bin/codesign 标志允许 codesign 工具无需密码即可访问密钥 — 否则管道中的自动签名将被对话框中断。set-key-partition-list 命令对于兼容 macOS 在自动模式下代码签名的要求是必需的。

证书问题及解决方法

最常见的错误 — 在 Xcode 编译时出现 “No signing certificate found”。当 Keychain 中缺少与所选构建类型对应的带私钥的证书时发生。解决方法:检查 Keychain Access 中是否存在证书,从 Apple Developer Portal 下载并安装。如果私钥丢失(旧计算机、系统重装),需要吊销旧证书并颁发新证书。

CI/CD 中的 “Valid signing certificate not found” 错误发生在代理未安装 Apple 中间证书 (Apple Worldwide Developer Relations CA) 时。Apple 在下载开发者证书时会包含中间证书到信任链中,但手动导出 .p12 时它们可能缺失。解决方法 — 从 Apple Certificate Authority 网站下载中间证书并将其安装到 CI 代理的钥匙串中。

证书过期 问题在签名时表现为 “This certificate has an invalid issuer” 错误。Apple Developer Portal 显示每个证书的状态和到期日期。如果应用程序已经在 App Store 中使用过期证书发布,它将继续运行 — App Store 使用自己的 Apple 证书进行分发。但是,要上传新的构建版本,需要有效的 Distribution 证书。Fastlane 包含 cert 命令用于自动创建和更新证书。

常见问题

同一个 Apple Certificate 可以用于 iOS 和 macOS 应用程序吗?

不可以,iOS 和 macOS 颁发不同类型的证书 — iOS App Development 和 Mac Development。Apple Distribution 证书也按平台划分。在 Apple Developer Portal 中创建证书时,需要指定目标平台 — 不存在适用于所有平台的通用证书。

如果证书私钥丢失了该怎么办?

需要在 Apple Developer Portal 中通过 Certificates, Identifiers & Profiles 吊销旧证书。然后通过 Keychain Access 创建新的 CSR 并颁发新证书。所有使用旧证书签名的应用程序将需要重新签名并重新上传到 App Store,如果需要发布更新。

一个 Apple Developer 帐户可以拥有多少个证书?

一个 Apple Developer Program 帐户最多允许同时拥有两个 Distribution 证书和无限数量的 Development 证书。Enterprise 帐户有单独的限额。如果已达到 Distribution 证书的限制,需要在创建新证书之前吊销现有证书之一。

如何从命令行检查证书的有效期?

使用 security 工具:security find-identity -v -p basic 将列出钥匙串中所有证书及其到期日期。对于特定证书,指定其 SHA-1 哈希:security find-certificate -c “Developer” -p | openssl x509 -noout -enddate。

更改 Apple ID 帐户会影响现有证书吗?

是的,证书绑定到特定的 Apple Developer 帐户 (Team ID)。更改帐户时,旧证书对于新 Team ID 将变为无效。Xcode 在 Accounts Preferences 中更改帐户时,会自动提示为新的团队创建新证书。

总结

  • Apple Certificate — Apple CA 颁发的 X.509 数字证书,用于在代码签名时验证开发者身份
  • Development 证书允许在物理设备上运行应用程序而无需发布到 App Store
  • Distribution 证书用于将应用程序上传到 App Store 和 Ad Hoc 分发
  • APNs 证书或令牌用于通过 Apple 服务器传递推送通知
  • 私钥 存储在开发者的 Keychain 中,丢失后无法恢复 — 需要吊销证书
  • PKCS12 导出用于在计算机之间以及向 CI/CD 系统传输证书
  • 信任链 包括根证书、中间证书和开发者证书 — 任何环节的中断都会阻止签名

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读