签名机制
保证安装到用户手机上的APP都是经过Apple官方允许的
概述
不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤
- 生成CertificateSigningRequest.certSigningRequest文件
- 获得ios_development.cer\ios_distribution.cer证书文件
- 注册device、添加App ID
- 获得*.mobileprovision文件
对于真机调试,现在的Xcode已经自动帮开发者做了以上操作
Apple各设备中包含的密钥
Mac设备
- Mac公钥
- Mac私钥
App后台
- Apple私钥
iOS设备
- Apple公钥
具体流程
Mac私钥
对APP
进行数字签名,生成App代码
以及签名
。Apple私钥
对Mac公钥
进行证书签名,生成Mac公钥
以及对应的Mac公钥散列值加密后的值
,也即是证书
。Apple私钥
对第2步生成的证书
以及app id
,entitlements
和devices
进行数字签名,生成对应的数字签名
和证书
以及app id
,entitlements
和devices
的明文,这一步也就是生成描述文件
。Apple公钥
对第3步的描述文件
中的数字签名进行验证,验证通过之后,可以拿到里面的证书。然后再用描述文件中的App信息对App的信息以及手机设备信息进行校验。- 用
Apple公钥
对第4步中拿到的证书进行数字签名验证,验证通过之后可以拿到证书里面的Mac公钥
。 - 用第5步中拿到的
Mac公钥
对App进行数字签名校验,验证通过之后就说明可以在真机上面运行。
如何获取Mac公钥
.certSigningRequest
文件,就是Mac设备的公钥。简称CSR文件。
获取证书
.cer
文件:利用Apple私钥(CA),对Mac公钥生成的数字签名
生成mobileProvision
.mobileprovision
文件:利用Apple私钥(CA),对[.cer证书、devices、app id、entitlements]进行数字签名
App启动时需要做的安全检测
AppStore
从AppStore下载安装的APP,你会发现里面是没有.mobileprovision
文件的。
它的验证流程会简单很多,大概如下所示
APP
上传到Apple Connect
之后,Apple会用Apple私钥
对APP
进行签名- 当我们启动App的时候,只需要通过
Apple公钥
对安装包进行验证。
App其他渠道
P12文件
P12一般用于团队开发当中,当我们用大于三个Mac设备开发应用时,想要申请新的证书,如果在我们的证书里,包含了3个发布证书,2个开发证书,可以发现再也申请不了开发证书和发布证书了。(具体的限制可能随时变)
P12中包含哪些信息
- Mac私钥
- 证书
- Mac公钥
- 由
Apple私钥
对Mac公钥
签名