iOS证书签名
2024-10-22 11:11:29
苹果官方有一对密钥,即私钥和公钥,私钥在苹果后台,公钥在iOS系统中(如iPhone手机在出厂后,其中就保存有苹果官方的公钥);在Mac系统打包app时也会生成一对密钥(私钥、公钥),并保存在钥匙串中。为了区分这两对密钥,将苹果官方的那对密钥记为A,即私钥A、公钥A;将Mac系统生成的那对密钥记为M,也就是私钥M、公钥M。
下面我们分析一下 iOS的签名原理(包括签名与验证):
- XCode在向苹果服务器申请证书前,会先向钥匙串申请一个CSR文件,同时生成一对非对称加密密钥,也就是私钥M和公钥M,并将公钥M放在CSR中。
- XCode把CSR文件发送给苹果服务器,用于申请证书。
- 苹果服务器用私钥A对收到的公钥M进行签名,生成Certificate文件(即证书,后缀名为.cer,里面有公钥M)。接着对Certificate、Devices、App ID以及Entitlements一起组成的数据用私钥A进行签名,生成Provisioning Profile(即描述文件),并将它发给XCode。
- iOS项目在编译完成之后会生成.app文件,你可以在XCode的Project中找到它。有了.app文件,XCode先使用私钥M对.app进行签名,然后,把.app和描述文件一起压缩成安装包.ipa文件。
- XCode准备把安装包安装在苹果设备(如iPhone)上。
- iPhone对安装包进行验证,即用公钥A验证描述文件中的签名。验证通过则说明描述文件里的数据是苹果授权的。
- 当第【6】步验证通过后,再用公钥A验证证书中的签名。验证通过则说明公钥M是安全可信任的。
- 第【7】步验证通过后,就可以取出描述文件里的数据做各种验证,包括用公钥M验证App签名,验证iPhone是否在设备列表中,App ID是否对得上,使用的权限是否跟Entitlements对应等。当这些全部验证通过,iPhone就可以安装app了。
以上就是iOS签名的流程分析了,也就是iOS签名原理。显然,苹果用了两对非对称加密密钥,进行的是双重验证,基本保证了XCode真机调试的安全性,确保app的安装行为是受到苹果管控的。
最新文章
- Spring学习笔记1——基础知识 (转)
- SlickGrid example 4: 过滤
- 开发设计模式(一)Command模式
- Python ImportError: No module named *****
- IE6 png 透明 (三种解决方法)
- 一道C语言面试题:写一个宏,将16位的整数转为Big Endian
- PAT (Advanced Level) 1026. Table Tennis (30)
- delphi字符串操作函数一览
- 李耀于NOIP2010集训出的题 Dvalue
- sql注入--双查询报错注入
- 【vue】使用localStorage解决vuex在页面刷新后数据被清除的问题
- LSTM/RNN中的Attention机制
- linux下怎么进入本机mysql
- python通过操作windows系统注册表方式修改环境变量
- Angularjs的那些事 – 视图的生命周期
- Mac实现远程服务器登录管理
- 洛谷 P2473 [SCOI2008]奖励关(状压dp+期望)
- Linq 时间参数的一个坑
- spring-boot启动注解@EnableAutoConfiguration
- vbs 修改Administrator帐号密码