iOS App 备案证书信息获取指南

2026-05-08T17:36:00

本文说明 iOS 项目在 App 备案时如何获取:

  • iOS 平台 Bundle ID
  • 公钥
  • 证书 SHA-1 指纹

这些信息来自两个地方:

  • Bundle ID 来自 Xcode 工程或 Apple Developer 的 App Identifier。
  • 公钥和 SHA-1 指纹来自用于发布 App 的 Apple Distribution 证书。

下面以我目前在开发的一个项目为例子说明。

1. 获取 Bundle ID

从本项目获取

可以直接到Xcode查看。

本项目主 App 的 Bundle ID 是:

tech.railgun.Pocketop

也可用命令确认:

rg -n "PRODUCT_BUNDLE_IDENTIFIER" DesktopBrowser.xcodeproj/project.pbxproj

主 App 对应的值应为:

PRODUCT_BUNDLE_IDENTIFIER = tech.railgun.Pocketop;

注意不要填 Share Extension 的 Bundle ID:

tech.railgun.Pocketop.ShareExtension

App 备案页面只能填主 App 的 Bundle ID。

从 Apple Developer 获取

也可以登录 Apple Developer:

Certificates, Identifiers & Profiles > Identifiers

找到对应 App Identifier,查看 Bundle ID。

2. 获取发布证书

备案要使用发布签名证书,通常是以下类型之一:

Apple Distribution
iOS Distribution
Distribution Managed

不要使用开发证书:

Apple Development
iOS Development

开发证书只能用于调试,和 App Store 上架包的签名证书不一致。

从 Xcode 导出 .p12

  1. 打开 Xcode。
  2. 进入 Xcode > Settings > Accounts
  3. 选择 Apple ID。
  4. 点击 Manage Certificates...
  5. 找到 Apple Distribution 证书。
  6. 导出为 .p12 文件,例如:
~/Downloads/AppleDistribution.p12

导出时会设置一个导出密码,要记牢,后续命令会提示输入。

如果没有Apple Distribution证书,点击左下角+号按钮生成一个即可,点击后会立即生成,然后再从列表上导出。

3. 从 .p12 提取证书

.p12 里可能包含证书和私钥。备案不需要私钥,只需要证书中的公钥和证书指纹。

使用以下命令只提取证书:

openssl pkcs12 -legacy \
  -in ~/Downloads/AppleDistribution.p12 \
  -nokeys \
  -clcerts \
  -out /tmp/AppleDistribution-cert.pem

说明:

  • -legacy:兼容 Xcode 导出的旧式 .p12 加密算法,例如 RC2-40-CBC
  • -nokeys:不导出私钥。
  • -clcerts:只导出客户端证书。
  • /tmp/AppleDistribution-cert.pem:临时证书文件。

如果不加 -legacy 出现类似下面的错误,说明 OpenSSL 3 禁用了旧算法:

Algorithm (RC2-40-CBC : 0)

加上 -legacy 即可。

4. 确认证书类型

提取后先检查证书是不是发布证书:

openssl x509 \
  -in /tmp/AppleDistribution-cert.pem \
  -noout \
  -subject \
  -issuer \
  -dates \
  -fingerprint \
  -sha1

正确的发布证书示例:

subject=UID=2V4LAFQNPA, CN=Apple Distribution: Jiahui Li (2V4LAFQNPA), OU=2V4LAFQNPA, O=Jiahui Li, C=US
issuer=CN=Apple Worldwide Developer Relations Certification Authority, OU=G3, O=Apple Inc., C=US
notBefore=May  8 08:45:04 2026 GMT
notAfter=May  8 08:45:03 2027 GMT
sha1 Fingerprint=[8B:【此处打码】:45]

如果 subject 里是下面这种,则不是备案应该使用的发布证书:

CN=Apple Development: ...

5. 获取证书 SHA-1 指纹

证书 SHA-1 指纹由这个命令生成:

openssl x509 \
  -in /tmp/AppleDistribution-cert.pem \
  -noout \
  -fingerprint \
  -sha1

输出示例:

sha1 Fingerprint=8B:【此处打码】:45

备案页面通常要求填写 40 位十六进制字符串。把冒号去掉即可:

8B【此处打码】45

SHA-1 指纹是怎么算出来的

这个 SHA-1 指纹是对整张 X.509 证书的 DER 编码内容计算 SHA-1 摘要。

可以理解为:

# 将证书转换成 DER 二进制
openssl x509 -in /tmp/AppleDistribution-cert.pem -outform DER -out /tmp/AppleDistribution-cert.der

# 对 DER 证书计算 SHA-1
openssl dgst -sha1 /tmp/AppleDistribution-cert.der

这和 openssl x509 -fingerprint -sha1 得到的是同一个证书指纹,只是输出格式不同。

重要区别:

  • SHA-1 指纹不是对 Bundle ID 计算的。
  • SHA-1 指纹不是对公钥字符串计算的。
  • SHA-1 指纹是对发布证书本身计算的。

6. 获取公钥

使用以下命令从证书提取公钥,并输出为备案页面常用的十六进制字符串:

openssl x509 \
  -in /tmp/AppleDistribution-cert.pem \
  -pubkey \
  -noout \
  | openssl pkey -pubin -outform DER \
  | xxd -p -c 100000

输出会是一长串十六进制,例如:

30820122300d06092a864886f70d0101...

将整串复制到备案页面的“公钥”字段即可。

7. 安全注意事项

  • 不要把 .p12 文件提交到仓库。
  • 不要把 .p12 密码写进文档或聊天记录。
  • .p12 可能包含私钥;备案只需要提取出的公钥和证书 SHA-1 指纹。
  • 如果将来更换发布证书,需要重新计算公钥和 SHA-1 指纹,并更新备案信息。
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »