iOS App 备案证书信息获取指南
本文说明 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.ShareExtensionApp 备案页面只能填主 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
- 打开 Xcode。
- 进入
Xcode > Settings > Accounts。 - 选择 Apple ID。
- 点击
Manage Certificates...。 - 找到
Apple Distribution证书。 - 导出为
.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【此处打码】45SHA-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 指纹,并更新备案信息。
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »