苹果官方有一对密钥,即私钥和公钥,私钥在苹果后台,公钥在iOS系统中(如iPhone手机在出厂后,其中就保存有苹果官方的公钥);在Mac系统打包app时也会生成一对密钥(私钥、公钥),并保存在钥匙串中。为了区分这两对密钥,将苹果官方的那对密钥记为A,即私钥A、公钥A;将Mac系统生成的那对密钥记为M,也就是私钥M、公钥M。

下面我们分析一下 iOS的签名原理(包括签名与验证):

  1. XCode在向苹果服务器申请证书前,会先向钥匙串申请一个CSR文件,同时生成一对非对称加密密钥,也就是私钥M和公钥M,并将公钥M放在CSR中。
  2. XCode把CSR文件发送给苹果服务器,用于申请证书。
  3. 苹果服务器用私钥A对收到的公钥M进行签名,生成Certificate文件(即证书,后缀名为.cer,里面有公钥M)。接着对Certificate、Devices、App ID以及Entitlements一起组成的数据用私钥A进行签名,生成Provisioning Profile(即描述文件),并将它发给XCode。
  4. iOS项目在编译完成之后会生成.app文件,你可以在XCode的Project中找到它。有了.app文件,XCode先使用私钥M对.app进行签名,然后,把.app和描述文件一起压缩成安装包.ipa文件。
  1. XCode准备把安装包安装在苹果设备(如iPhone)上。
  1. iPhone对安装包进行验证,即用公钥A验证描述文件中的签名。验证通过则说明描述文件里的数据是苹果授权的。
  2. 当第【6】步验证通过后,再用公钥A验证证书中的签名。验证通过则说明公钥M是安全可信任的。
  3. 第【7】步验证通过后,就可以取出描述文件里的数据做各种验证,包括用公钥M验证App签名,验证iPhone是否在设备列表中,App ID是否对得上,使用的权限是否跟Entitlements对应等。当这些全部验证通过,iPhone就可以安装app了。

以上就是iOS签名的流程分析了,也就是iOS签名原理。显然,苹果用了两对非对称加密密钥,进行的是双重验证,基本保证了XCode真机调试的安全性,确保app的安装行为是受到苹果管控的。

最新文章

  1. Spring学习笔记1——基础知识 (转)
  2. SlickGrid example 4: 过滤
  3. 开发设计模式(一)Command模式
  4. Python ImportError: No module named *****
  5. IE6 png 透明 (三种解决方法)
  6. 一道C语言面试题:写一个宏,将16位的整数转为Big Endian
  7. PAT (Advanced Level) 1026. Table Tennis (30)
  8. delphi字符串操作函数一览
  9. 李耀于NOIP2010集训出的题 Dvalue
  10. sql注入--双查询报错注入
  11. 【vue】使用localStorage解决vuex在页面刷新后数据被清除的问题
  12. LSTM/RNN中的Attention机制
  13. linux下怎么进入本机mysql
  14. python通过操作windows系统注册表方式修改环境变量
  15. Angularjs的那些事 – 视图的生命周期
  16. Mac实现远程服务器登录管理
  17. 洛谷 P2473 [SCOI2008]奖励关(状压dp+期望)
  18. Linq 时间参数的一个坑
  19. spring-boot启动注解@EnableAutoConfiguration
  20. vbs 修改Administrator帐号密码

热门文章

  1. XAF特性属性记录
  2. 让启动的jar包能打断点
  3. Altium Designer Winter 09 — 01 — 快速创建项目
  4. react 04 生命周期
  5. null和undefine的区别
  6. python 自动化 代码操作数据库
  7. mysql拼接多条字段
  8. 容器 之搭建 jenkins ci 平台
  9. 关于JWT中RSA数据加密协议在.net中应用
  10. 分享: 第二性 合卷本 竖本.PDF