P12 与 Mobileprovision 文件详解:iPhone 签名证书

Feather 和 KSign 等设备端签名工具在安装任何应用之前都需要两个文件:一个 .p12 证书和一个 .mobileprovision 描述文件。很多人从别人那里拿到这些文件,却不清楚里面包含什么内容,也不知道可能出什么问题。本指南依据 Apple 官方文档,解释这两个文件分别是什么、如何检查它们,以及其中的风险。

先说风险

  • .p12 文件里包含一个私钥。 谁拿到这个文件和它的密码,谁就能以该开发者的身份签名应用。千万不要公开发布它,也不要发送给你不信任的人。
  • Apple 可以吊销任何证书。 Apple 的文档写明,Apple “可以自行决定在任何时候吊销数字证书”。一旦发生这种情况,用该证书签名的应用就会无法运行。
  • 共享证书和购买来的证书最容易被吊销。 被很多陌生人用于公开分发的证书,已经超出了它最初获批时的使用条款。你无法控制它何时被吊销,而且为此付的钱通常也不会退还。参见企业证书安全须知。
  • 证书本身并不检查应用是否安全。 签名只能说明是谁签的这个应用,并不能说明它是否安全。请自行检查 IPA 文件:参见安装前如何扫描 IPA 文件是否含有恶意软件。

.p12 文件是什么

签名证书本身是公开的。真正能让人签名应用的,是证书加上在开发者 Mac 上生成的私钥。Apple 的钥匙串访问(Keychain Access)指南把 .p12 格式(Personal Information Exchange,个人信息交换)描述为一个”可作为你的数字证书和私钥的备份导入”的文件。导出时,钥匙串访问会要求设置一个密码,再次导入时也需要用到这个密码。这就是为什么签名工具需要一个 .p12 文件和一个密码。

Apple 签发多种类型的证书。对于在 App Store 之外安装到 iPhone 上这件事来说,你会接触到的有:开发证书、来自付费 Apple Developer Program 会员资格的发行证书,以及来自 Apple Developer Enterprise Program 的内部分发证书。

.mobileprovision 文件是什么

描述文件(provisioning profile)是由 Apple 签名的文件,用于说明哪些应用可以运行、由谁签名、可在哪些设备上运行以及拥有哪些权限。Apple 的技术说明 TN3125 列出了其中包含的内容:

  • DeveloperCertificates(开发者证书):允许为该描述文件所涵盖的应用签名的证书。你的 .p12 必须与其中之一匹配。
  • App ID:大多数描述文件只适用于单个 App ID。通配符 App ID 可以涵盖多个应用。
  • Devices(设备):大多数描述文件通过 UDID(ProvisionedDevices)列出具体设备。而 In-House(企业版)描述文件使用 ProvisionsAllDevices,因此可在任意设备上使用。参见如何查找 iPhone 的 UDID。
  • ExpirationDate(过期时间):每个描述文件都有一个过期时间,超过该日期后该描述文件将失效。
  • Entitlements(权限):一份允许使用的功能清单,例如推送通知或 App Groups。Apple 表示,应用所声明的每一项权限都必须出现在描述文件的允许清单中。

Apple 还说明,设备会先检查描述文件的签名,然后再检查应用是否符合该描述文件的条件。如果应用的签名证书、App ID、设备或权限与描述文件不匹配,iOS 将无法运行该应用。

如何自行检查这些文件

  • 在签名工具内:Feather 的功能中包含「应用和证书的详细信息」,因此导入后即可在其中查看名称、类型和过期时间。
  • 在 Mac 上:Apple 的 TN3125 展示了如何在终端中用 security cms -D -i profile.mobileprovision 解码描述文件。输出内容包括 ExpirationDate(过期时间)、设备列表或 ProvisionsAllDevices,以及权限信息。
  • 检查证书与描述文件是否匹配:.p12 中的证书必须是该描述文件 DeveloperCertificates 中的其中一个。两者不匹配是签名工具在安装前报错的常见原因。

证书文件的常见问题

  • 密码错误: .p12 文件无法导入。只有导出该文件的人才知道密码。
  • 描述文件已过期: 用它签名的应用在过期日期之后会停止打开。你需要一个新的描述文件,然后重新签名这些应用。请参阅如何重新签名 IPA 文件。
  • 设备不在描述文件中: 对于开发版和 ad hoc 描述文件,你的 UDID 必须被列入其中。否则安装会失败,常见提示为“无法验证完整性”:参见完整性错误修复方法。
  • 证书被吊销: 所有用它签名的应用会立即全部停止,iPhone 上的任何设置都无法改变这一点。请参阅证书被吊销后该怎么做。
  • 缺少权限(entitlement): 如果一个应用需要的某项能力不在描述文件允许范围内,它可能可以安装但在该功能处失败,也可能根本无法安装。

Scarlet iOS 的定位

Scarlet 不需要你提供 .p12 或描述文件。它使用共享证书而不是你的 Apple ID 进行签名,这也是为什么设置如此简单,同时也是为什么一旦 Apple 吊销该证书,所有通过它安装的应用都会停止打开。Scarlet 已在 iOS 14 到 iOS 26 上确认可用;第三方报告称支持 iOS 27,但尚未得到官方确认。如果你拥有来自 Apple Developer Program 的自有证书,像 Feather 或 KSign 这样的签名工具可以直接使用它。关于其中的取舍,请参阅设备端签名与电脑端签名对比。

常见问题

我能用免费 Apple ID 制作 .p12 和描述文件吗?

免费 Apple ID 会给你一个个人团队证书,Xcode、Sideloadly 和 SideStore 等工具会为你自动管理。由它生成的描述文件有效期为 7 天。专为 .p12 文件设计的签名工具主要是为付费开发者证书准备的。

使用别人在网上分享的证书安全吗?

这种证书在被吊销之前都能正常使用,但吊销可能随时发生,且不会提前通知。你也无法知道还有谁掌握着对应的私钥。请把它当作临时方案,切勿用它签署任何敏感内容。

重新获取一个新的描述文件能解决证书被吊销的问题吗?

不能。描述文件只是指定了它所允许使用的证书。如果证书已被吊销,你需要的是另一张证书,以及包含该证书的描述文件。

类似文章