一直都没有细想过苹果的签名机制,今天突然间想到,所以研究了一下,在此记录,作为学习资料使用。如有问题,欢迎留言订正~
因为苹果的安全策略,通过签名机制保证手机上的每个APP都是经过苹果认证的。ioser都知道苹果的APP安装方式有四种:
1.通过App Store安装
2.开发者通过xcode安装
3.Ad-hoc测试证书打包的APP,数量限制100
4.In-house 企业版证书打包的APP,信任企业证书后可以使用
一. 通过App Store安装的APP
- 由苹果生成一对公私钥,公钥内置在iOS设备中,私钥由苹果保管。
- 开发者上传APP给苹果审核后,苹果用私钥对APP数据进行签名,发布至App Store。
- iOS设备下载APP后,设备内公钥进行验签,若正确,则证明该APP是苹果认证过的。
二. 通过xcode安装(真机调试)
由于真机调试时不需要提交苹果审核,所以苹果无法对APP进行签名,因此,苹果采用了双重签名的机制,Mac电脑上有一对公私钥,苹果还是原来的一对公私钥。
- 开发过程中需要真机调试时,需要从钥匙串中的证书中心创建证书请求文件(CSR),并传至苹果服务器。
- 苹果使用私钥对CSR签名,生成一份包含Mac公钥信息及Apple对它的签名,即证书(CER:开发证书或者发布证书)
- 编译完一个APP 后,Mac电脑使用私钥对App进行签名。
- 在安装APP时,根据当前配置把CER证书一起打包进App。
- iOS设备通过内置的Apple的公钥验证CER是否正确,证书验证确保Mac公钥是经过苹果认证的。
- 再使用CER文件中Mac的公钥去验证App的签名是否正确,确保安装行为是经过苹果允许的。
三. 通过Ad-hoc正式打包安装
Xcode打包App生成ipa文件,通过iTunes或者蒲公英等第三方发布平台,安装到手机上。流程上同真机调试相同,差别在第四步:
- 开发过程中需要真机调试时,需要从钥匙串中的证书中心创建证书请求文件(CSR),并传至苹果服务器。
- 苹果使用私钥对CSR签名,生成一份包含Mac公钥信息及Apple对它的签名,即证书(CER:开发证书或者发布证书)
- 编译完一个APP 后,Mac电脑使用私钥对App进行签名。
- 编译签名完成后,要导出ipa文件,导出时,需要选择一个保存的方法:App Store,Ad-hoc,Enterprise,Development,就是选择将上一步生成的CER一起打包进App。
- iOS设备通过内置的Apple的公钥验证CER是否正确,证书验证确保Mac公钥是经过苹果认证的。
- 再使用CER文件中Mac的公钥去验证App的签名是否正确,确保安装行为是经过苹果允许的。
四. In-House企业版证书打包
企业版证书签名验证流程和Ad-Hoc差不多,只是企业版不限制设备数,而且需要用户在iOS设备上手动点击信任证书。
该文章参考地址:https://www.jianshu.com/p/7806ea264aea,只为自己学习使用