Apple应用签名原理
2021-04-16 本文已影响0人
木扬音
苹果的需求
- 安装包可以不用上传到App Store直接安装
- 需要经过苹果允许才能安装
- 不能被滥用导致非开发App也能安装
双层签名
因为iOS 开发环境实在Mac系统下进行,所以就产生了两个角色,iOS系统和Mac系统
- 在
Mac
系统中生成非对称加密的公钥和私钥(Xcode已经执行),这里称为公钥M
和私钥M
- 苹果自己有一对私钥和公钥,和Apple Store原理一样,
私钥
放在苹果后台,公钥在每个iOS系统里,这里称为公钥A
和私钥A
- 把
公钥A
和你的开发信息
绑定在一起,传递给苹果后台(这就是CSR文件
),用苹果后台的私钥A
去签名公钥M
,得到一份包含了公钥M及其签名
,把这称为证书
- 在开发时,编译完一个APP后,用本地
私钥M(P12)
对APP进行签名
,同时把上一步得到的证书
一起打包进APP,安装到手机上 - 在安装时,iOS系统
取得证书
,通过系统内置的公钥A
,去验证数字签名
是否正确 - 验证证书后,确保了公钥M是被苹果认证的,再用公钥M去验证App的签名,这里就间接验证了这个App的安装行为是否经过苹果官方允许。(这里只验证安装行为,不验证APP是否改动,因为开发阶段的APP是不断变化的)
有了上面的验证就可以确保开发者的认证和程序的安全性吗?那不是申请一个证书就可以安装APP到所有iOS设?,于是就有了描述文件
描述文件
苹果为了解决应用滥用的问题,所有又增加了两个限制
- 在苹果后台注册的设备才可以安装
- 签名只针对某一个具体签名
并且苹果还想控制App里面的iCloud/PUSH/后合运行/调试器附加这些权限,所以苹果把这些权限开关统一称 Entitlements(授权文件)
.并将这个文件放在了一个叫做Provisioning Profile(描述文件)
文件中。
描述文件
是在AppleDevelop网站创建的(在Xcode中填上ApplelD它会代办创建)xeode运行时会打包进入APP
所以我们使用CSR
申请证书时,我们还要申请一个东西!! 就是描述文件!
在开发时,编译完一个 APP 后,用本地的私钥M
对这个APP进行签名
,同时把从苹果服务器得到的 Provisioning Pr
文件打包进APP里,文件名为embedded.mobileprovision
,把 APP 安装到手机上.最后系统进行验证。
总结
- Mac电脑生成一对
公钥
、私钥
- 利用本地公钥创建
CSR文件
,请求证书
- 钥匙串将
证书
和本地私钥
(p12证书)做关联
- 利用本地公钥创建
- 苹果服务器利用本地私钥
生成证书
和描述文件
- 证书包含Mac电脑的
公钥
和签名
- 描述文件:设备列表、AppID列表、权限列表
- 证书包含Mac电脑的
- iOS系统利用系统中的公钥(与苹果服务上的私钥是一对)对App进行验证
- 验证
描述文件
是否与证书
匹配 - 验证App的安装行为(通过验证证书,拿出证书中的
公钥
对App的签名
进行验证)
- 验证