iOS 证书管理、验证、打包流程
背景
iOS软件的开发和发布离不开证书和配置文件,如果要想发布app到Apple Store或者使用苹果的推送通知功能,都需要个人开发者证书签名该app,以便通过苹果的认证和审核。由于我们公司的app不是单独一个,而是一个客户对应一个app,在新版本中,需要用到推送通知功能,就需要发布app到Apple Store,通过认证后才能正常使用苹果提供的这个服务,同时,为了满足部分客户要把自己的app发布到Apple Store 的需求,因此,我们需要使用这部分功能的客户上传他们的个人开发者证书和相关文件。 这时,就需要对这些证书进行验证和管理,以及在打包时,动态导入这个证书并签名,这篇文章主要是为了记录相关的原理、验证证书、打包等技术点的实现细节。
专业词汇
签名证书:
签名证书是用来在编译代码后进行代码签名的,主要是为了说明这个代码的所有者和合法性。通过iOS7 的SDK编译时,在编译的时候就需要指定签名证书,当然我们仍然可以在编译后进行重签名。
推送证书:
推送证书主要我们的服务器发送推送信息给苹果服务器时,需要用到的认证证书,打包的时候不需要用到,仅仅是我们后台与苹果服务器通讯时需要。
AppId:
每个应用都有唯一的AppId,全球唯一,是应用的一个标识。推送证书在生成时会要求指定AppId,因此一个推送证书对应唯一的AppId。
配置文件:
配置文件包含了以上几乎所有的信息,包括这个应用的AppId,应用对应的签名证书,应用是否开启了推送功能,应用是开发版本还是发布版本,应用能够被哪台手机安装(对于发布版本的应用,是所有手机都可以安装的)。
验证、获取证书的信息
签名证书:后缀主要为 .p12,同时需要用户输入导入该证书的密码
在这个签名证书里面,可以获得UID、证书名称、证书有效期。在linux或mac下,使用openssl 来获取相关的信息,命令如下:
(1) openssl pkcs12 -in ~/cert.p12 -nodes -passin pass:"my password" | openssl x509 -noout –text
可以输出所有我们需要的信息,但是需要进行检索和解析。(2) openssl pkcs12 -in ~/cert.p12 -nodes -passin pass:"my password" | openssl x509 -noout –dates
可以输出证书的有效期(3) openssl pkcs12 -in ~/cert.p12 -nodes -passin pass:"my password" | openssl x509 -noout –subject
可以输出证书的UID和证书名称推送证书(可选):后缀主要为 .p12,同时需要用户输入该证书的密码 在这个签名证书里面,同样可以获得UID、证书名称、证书有效期、以及是否是推送通知类型的证书。命令同上。 如何判断此 .p12文件是推送证书???下图高亮处,后面跟着AppId
配置文件:后缀为 .mobileprovision
从这个配置文件中可以获得AppId、有效期、证书类型,是开发版本还是发布版本等等。方法如下:
(1) 先把这个配置文件转成xml,再解析,命令:
openssl smime -inform der -verify -noverify -in file.mobileprovision。
(2) xml节点说明:
配置文件生成的日期
<key>ExpirationDate</key>
<date>2014-10-28T03:19:05Z</date>配置文件过期的时间<key>application-identifier</key>
<string>KZV5N634G4.com.mdby.motan2.testForPush</string>应用标识符,全球唯一,红色部分需要在打包时传给打包程序
就是,我所说的AppId
<key>aps-environment</key>
<string>development</string><key>aps-environment</key>
<string>production</string>判断该证书是发布版本,还是开发版本,当然,我们可以通过其他的标志来判断。<key>UUID</key>
<string>855C845A-2E51-414F-A29B-837AD1A67F67</string>
是一个唯一标识符,我们要想在工程中使用这个配置文件,一般是双击,然后在xcode 的工程中,就可以选择这个配置文件了,其实那是系统解析了这个mobileprovision文件,提取里面的UUID,用这个UUID重新命名这个mobileprovision文件,然后将这个文件放到Mac 系统的~/Library/MobileDevice/Provisioning Profiles/这个目录下。在Xcode 的工程中,就是默认在这个路径下寻找可用的mobileprovision文件。因此我们编译和打包前,需要通过这个UUID重新命名服务器端传过来的mobileprovision文件,并放到上面那个目录下,从而在打包命令中直接通过UUID指定配置文件。
推送证书制作
实际上,客户所上传的那个.p12后缀的推送证书,并不能直接用来推送信息,需要把里面的证书和私钥同时提取到一个 .pem后缀的文件中,利用这个文件与Apple 服务器端通信。步骤如下:
p12文件中提取证书
openssl pkcs12 -in mykeystore.p12 -clcerts -nokeys -out mycert.pem -passin pass:"mdby2013"
p12文件中提取私钥
openssl pkcs12 -nocerts -out mykey.pem -in push.p12 -passin pass:"mdby2013" -passout pass:"mdby2013"
合并cert和key
cat PushChatCert.pem PushChatKey.pem > ck.pem
编译、签名、打包
0、在低版本的command line 工具中,需要导入一个参数
export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate"
1、解锁Mac的钥匙串
security unlock-keychain -p $1 "~/Library/Keychains/login.keychain"
$1是登录系统钥匙串的密码
2、导入签名证书到Mac的钥匙串
security import /Users/mrghappy/app/mdby.p12 -k ~/Library/Keychains/login.keychain -P "$2" –A
$2是导入证书的密码,这个是客户在导出他们的签名证书时,填写的密码 -A 表示这个证书对任意应用可用,有安全风险,需要谨慎,加上这个是为了不要每次打包使用该证书签名时,总是弹出警告框,要求输入密码。
3、查看钥匙串中是否有该导入的证书
security find-certificate -a -c "$2" -Z | grep ^SHA-1
$2 是证书的名称,该命令会列举出具有这个名称的系统内的证书。
4、clean项目
xcodebuild clean
5、build项目
xcodebuild-target motan -configuration Release build PLATFORM_NAME=iphoneos BUILDSDK=/Developer-SDK7
CODE_SIGN_IDENTITY="$2"
PROVISIONING_PROFILE="$3"
其中2变量是签名证书对应的证书名称。2变量是签名证书对应的证书名称。3是配置文件对应的UUID
6、签名、打包
xcrun -sdk iphoneos PackageApplication -v /Users/mrghappy/app/build/Release-iphoneos/$4.app -o /Users/mrghappy/app/build/Release-iphoneos/$4.ipa --sign "$2" --embed /Users/mrghappy/app/mdby.mobileprovision
其中$4是这个项目的名称,--sign是指定签名证书签名,--embed 是打包时把配置文件打包进去。
7、当然,我们可以验证一下打包好的ipa文件是否正确
codesign -d -vvv --file-list - /Users/mrghappy/app/build/Release-iphoneos/$4.app
8、为了防止钥匙串中导入的证书过多,维护困难,我们可以在打包完后,删除掉
security delete-certificate -c "$2" ~/Library/Keychains/login.keychain
iOS 证书管理、验证、打包流程相关推荐
- IOS证书申请和打包流程
IOS证书申请和打包流程 参考资料: iOS 证书申请和使用详解 iOS完整的证书申请和打包过程 iOS开发证书与配置文件的使用 iOS 证书详解 iOS导出4个ipa包的含义 苹果开发者账号中,测试 ...
- Hbuilder用自有证书打包 ios App上架AppStore流程
Hbuilder用自有证书打包 ios App上架AppStore流程https://www.cnblogs.com/douyage/p/9075854.html 最近在用Hbuilder做跨平台开发 ...
- iOS APP从打包到发布appStore完整流程(含4位版本号实现)
转载自:https://www.jianshu.com/p/860fdd8860cc 2017年1月22日一.iOS APP从打包到发布appStore完整流程 1.首先确保代码里面连接的是正式环境, ...
- ios系统 ipa文件 打包流程详解 及 常见问题处理
注:先反省一下,原本打算一天一篇,每天进步一点点,但是最近变懒了,居然三天没有更新,在此告诫各位道友及我自己,程序员需戒欲,搞技术需持之以恒,不能三天打鱼,两天晒网. 现在步入主题,前段时间使用xco ...
- iOS 企业版账号打包及发布-图文流程详解
每一版Xcode升级之后,Archieve打包的界面都会略有调整,今天我们来讲一下Xcode9的企业版打包流程. 假设现在我们已有苹果企业版开发者账号 $299的,并且已经创建好证书.说明文件等前期准 ...
- 跨平台应用开发进阶(十一) :uni-app 实现IOS原生APP-云打包集成极光推送(JG-JPUSH)详细教程
文章目录 一.前言 二.资源 三.集成 四.遇到的问题及解决措施 4.1 IOS开发者证书无推送权限 4.2 manifest中并没有配置push模块.但云端打包ios就是一直报Code Signin ...
- 图文详解丨iOS App上架全流程及审核避坑指南
App Store作为苹果官方的应用商店,审核严格周期长一直让用户头疼不已,很多app都"死"在了审核这一关,那我们就要放弃iOS用户了吗?当然不是!本期我们从iOS app上架流 ...
- 2023年iOS App Store上架流程详解(上)
目录 1.注册开发者账号 2.登录并配置人员 3.申请证书和配置文件 一.证书管理 二.新建证书 三.使用appuploader服务同步证书 1)申请证书 2)添加Identifiers和配置A ...
- Image打包流程-Android10.0编译系统(四)
摘要:本节主要来进行Android10.0 Image打包流程,理解system.img是如何打包的 阅读本文大约需要花费28分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源 ...
- iOS架构-自动打包并上传到App Store(python)(21)
这里是摘自一篇用python 语法写的脚本,这里只是为了更好的理解自动化打包上传App Store的原理的. 一. iOS 自动打包并上传到App Store(python) 我们平时大都是用Appl ...
最新文章
- Tessellation (曲面细分) Displacement Mapping (贴图置换)
- 如何判断两物体加速度相等_高中物理:速度和加速度知识点
- c语言从E1到E123遍历,试题.习题__2011年c语言实验与习题集.doc
- [Cocoa]深入浅出Cocoa之Core Data(2)- 手动编写代码
- SqlSession接口和Executor
- 基于VS2015的C#的GDAl环境配置
- [Java] 用java写的植物大战僵尸辅助
- linux firefox 显示PDF,某个 pdf 文件用 firefox 和 okular 显示乱码
- VALUES LESS THAN value must be strictly increasing for each partition,MySQL分区需要注意的坑
- 域名备案和域名实名认证相同吗?
- 基于有道翻译的英翻中微信小程序
- 指纹浏览器是什么,有什么用,指纹浏览器有哪些,指纹浏览器排行
- git add 之后的文件被删除怎么恢复
- effective python怎么样_【Python】《Effective Python》 读书笔记 (一)
- 30万精英人才大迁徙:进军区块链,他们是赌徒还是信徒?
- 用小米盒子搭建家庭NAS
- 一文速览,118只区块链概念股谁对区块链是真爱?
- COMP9201_22T1笔记
- 批量修改图片名称且改为不同名字
- 淘宝店铺商品管理解决方案-商品SKU信息获取和修改oAuth2.0接口接入解决方案