4. 签名证书管理
说到签名证书,其实就是你和苹果之间的握手信物。没有它,应用就是黑户,上不了架也装不了机。我见过太多新手在这上面栽跟头,今天咱们就掰开揉碎聊聊。
证书管理,说白了就是三件事:用什么类型的证、谁给你发证、证放哪儿怎么导。嗯,听着简单,坑可不少。
证书类型:开发 vs 发布
苹果把证书分两大类,开发证书和发布证书。名字很直白,用途天差地别。
| 证书类型 | 用途 | 有效期 | 设备限制 |
|---|---|---|---|
| iOS Development | 真机调试、开发测试 | 1年 | 最多100台 |
| iOS Distribution | App Store上架、Ad Hoc分发 | 1年 | Ad Hoc最多100台 |
| iOS Distribution (In-House) | 企业内部应用分发 | 3年 | 无限制(需企业账号) |
证书颁发机构:苹果的验证体系
谁给你发证?苹果。但中间有个环节很多人忽略——证书颁发机构(CA)。苹果自己就是CA,它的根证书预装在所有iOS设备里。你生成CSR时,其实就是告诉苹果“我是谁,我要干嘛”。
流程是这样的:
- 你在Mac上生成密钥对(私钥+公钥)
- 公钥打包成CSR(证书签名请求)
- 苹果验证你的开发者账号身份
- 苹果签名你的CSR,返回证书
- 证书绑定你的公钥,私钥留在你本地
Keychain:你证书的老家
所有证书和私钥都住在macOS的Keychain里。你可以打开钥匙串访问应用看看。别被名字吓到,其实就是个加密数据库。
Keychain里不止有证书,还有你的私钥、Provisioning Profile甚至各种密码。每个证书都对应一个私钥,没有私钥的证书就是一张废纸。
我习惯用三个Keychain概念:
- 登录钥匙串:你的个人证书和私钥
- 系统钥匙串:系统级证书
- 自定义钥匙串:团队用,可以独立存储某项目的证书
证书导入导出:团队的交接艺术
证书要在团队间流转,就得导出导入。苹果搞了个.p12格式,其实就是加密打包的证书+私钥。
导出步骤:
- 打开钥匙串访问
- 找到你的证书(开发或发布)
- 右键导出,选.p12格式
- 设置一个强密码(至少12位)
- 发给同事
# 命令行导出方式
# 先找到证书名称
security find-identity -v -p codesigning
# 导出指定证书为.p12
security export -k ~/Library/Keychains/login.keychain-db \
-t certs -f pkcs12 \
-o MyCert.p12 \
-P "YourPassword123"
导入时双击.p12文件,输入密码就行。但有个坑:如果电脑上已有相同证书,钥匙串会问你是否替换。替换可能导致其他项目出问题。
证书的完整生命周期
证书不是永生的。你得掌握它从生到死的全过程。下面这张图展示了证书管理的核心流程:
- 开发证书:每年到期前一个月开始走续期流程
- 发布证书:同样每年更新,但App Store的已发布应用不受影响
- 企业证书:3年有效期,提前2个月向苹果申请续期
多证书环境怎么管
团队大了,证书就多了。开发、测试、发布、企业,每个环境都要独立证书。我见过有人把所有证书混着用,结果测试版和正式版签名混了,审核被拒。
建议这样做:
- 每个证书一个.p12文件,命名规则:项目名_环境_日期.p12
- 钥匙串里用文件夹组织,比如“XX项目开发”、“XX项目发布”
- 证书和Provisioning Profile配对存放
- CI/CD服务器用独立钥匙串,别和开发环境共用
证书与合规的那些事
合规不只是嘴上说说。苹果对证书管理有明确要求,尤其是企业证书。滥用企业证书分发个人应用,严重者会被封号。
我参与过一个合规审计,对方要求:
- 所有证书必须登记使用人
- 私钥加密存储,访问有日志
- 证书到期前必须有续期计划
- 离职人员证书立即撤销
你想想看,如果真出了安全问题,审计发现你连证书记录都没有,那才叫麻烦。
嗯,关于签名证书管理,核心就是这些。证书无小事,一步错步步错。私钥、密码、有效期,哪个都不能马虎。