思考:苹果是如何保证iPhone上运行的App都是经过官方允许的呢?
回答:最简单的方式就是通过官方生成的非对称加密的一对公私钥。在iOS系统中内置一个公钥,私钥有苹果后台保存,我门传App到AppStore时,苹果后台用私钥对App数据进行签名,iOS系统下载App后,用公钥验证这个签名。如果签名正确,这个App肯定是由苹果后台认证的,并且没有修改过。
但是如果苹果只有这一个入口的话,这个解决方案时可以的,但是我们实际中,还有开发者的debug模式,企业级证书的App,这样做显然是不可以的
那么我们来分析一下,它有些什么需求:
1.安装包不需要上传到App Store,可以直接安装到手机上.
2.苹果为了保证系统的安全性,又必须对安装的APP有绝对的控制权
3.经过苹果允许才可以安装
4.不能被滥用导致非开发APP也能被安装
为了实现这些需求,iOS签名的复杂度也就开始增加了,苹果这里给出的方案是双层签名.
步骤:
1.在Mac系统中生成非对称加密算法的一对公钥\私钥(你的Xcode帮你代办了).这里称为公钥M 私钥M . M = Mac
2.苹果自己有固定的一对公私钥,跟之前App Store原理一样,私钥在苹果后台,公钥在每个iOS系统中.这里称为公钥A , 私钥A. A=Apple
3.把公钥M 以及一些你开发者的信息,传到苹果后台(这个就是CSR文件),用苹果后台里的私钥 A 去签名公钥M。得到一份数据包含了公钥M 以及其签名,把这份数据称为证书。
4.在开发时,编译完一个 APP 后,用本地的私钥 M(今后你导出的P12) 对这个 APP 进行签名,同时把第三步得到的证书一起打包进 APP 里,安装到手机上。
5.在安装时,iOS 系统取得证书,通过系统内置的公钥 A,去验证证书的数字签名是否正确。
6.验证证书后确保了钥 M 是苹果认证过的,再用公钥 M 去验证 APP 的签名,这里就间接验证了这个 APP 安装行为是否经过苹果官方允许。(这里只验证安装行为,不验证APP 是否被改动,因为开发阶段 APP 内容总是不断变化的,苹果不需要管。)
WX20210415-111707.png
网友评论