苹果官方有一对密钥,即私钥和公钥,私钥在苹果后台,公钥在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的安装行为是受到苹果管控的。

iOS证书签名的更多相关文章

  1. IOS证书/私钥/代码签名/描述文件

    1.   相关资源 (1)   钥匙串程序(常用工具->钥匙串),用于创建证书请求.安装证书.导出私钥等 (2)   IOS开发中心:https://developer.apple.com/de ...

  2. iOS 证书与签名 解惑详解

    iOS 证书与签名 解惑详解 分类: iPhone2012-06-06 19:57 9426人阅读 评论(1) 收藏 举报 iosxcodecryptographyappleiphone测试   目录 ...

  3. iOS代码签名理解

    前言 做了几年iOS app coder了,对于证书的生成.使用流程烂熟于心,然而对于这套机制的原理却一直不甚理解.近来由于工作需要仔细研究了一下,特将自己的学习经验记录于此,以供大家学习指正. 问题 ...

  4. IOS证书的申请和使用

    苹果的证书繁锁复杂,制作管理相当麻烦,今天决定重置一个游戏项目中的所有证书,做了这么多次还是感觉很纠结,索性直接记录下来,日后你我他查阅都方便: 关于证书 苹果使用密文签名技术来验证App的合法性,不 ...

  5. ios证书

    内容提要: 安装app时提示 “无法下载应用,此时无法安装“XXX””.我遇到过多次是由于ios的app出现证书问题.本篇文章讲解用ios证书制作过程,以及每个步骤的解释. 正文: Xcode签名至少 ...

  6. iOS 证书调试的理解(Personal)

    证书签名 证书:众所周知,我们申请一个Certificate之前,需要先申请一个Certificate Signing Request (CSR) 文件,而这个过程中实际上是生成了一对公钥和私钥,保存 ...

  7. 阐明iOS证书和provision文件

    译:阐明iOS证书和provision文件 许多iOS开发人员都会和你说在iOS开发很困惑的问题之一,将app真正运行在真实的设备(iPhone iPad而不是模拟器),因为所有的这些都会涉及从苹果获 ...

  8. iOS证书详解--再转

    一.成员介绍1.    Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1)    Developer Certification(开发证书)安装在电脑上 ...

  9. (转)iOS 证书、密钥及信任服务

    iOS 证书.密钥及信任服务 ——翻译自Apple Reference<Certificate,Key,and Trust Services Programming Guide> 本章描述 ...

  10. iOS 证书那些事

    关于开发证书配置(Certificates & Identifiers & Provisioning Profiles),相信做iOS开发的同学没少被折腾.对于一个iOS开发小白.半吊 ...

随机推荐

  1. flask 项目构建

    创建虚拟环境 mkvirtualenv 环境名 安装所需要的包 pip install  flask == 0.12.4 pip install redis pip install flask-ses ...

  2. 【狂刷面试题】GO常见面试题汇总

    先给大家推荐一个实用面试题库  1.前端面试题库 (面试必备)            推荐:★★★★★ 地址:前端面试题库 2.前端技术导航大全      推荐:★★★★★ 地址:前端技术导航大全 3 ...

  3. 2022-05-19内部群每日三题-清辉PMP

    1.项目经理与项目相关方开会,获得关于如何最好地向施工现场输送用品的信息和知识.这使用的是哪种沟通方法类型? A.交互式沟通 B.内部沟通 C.拉式沟通 D.推式沟通 2.一个国际团队被分配到一个项目 ...

  4. MSSql 跨服务器查询解决方案

    先确定从服务器是否允许有外部链接的服务器: select * from sys.servers 没有的话,需要添加服务器链接: EXEC sp_addlinkedserver @server='10. ...

  5. Linux 升级 gcc g++

    Linux 升级 gcc g++ Centos7 上升级 gcc g++ # yum -y install centos-release-scl # yum -y install devtoolset ...

  6. [737] Interlude OpCodez

    [737] Interlude Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03 RequestEnterWorld ...

  7. Java程序(数组扩容的尝试)

    import java.util.Scanner; public class ArrayAdd { public static void main(String[] args) { int arr[] ...

  8. android audiorecord初始化失败相关资料收集

    We're also struggling with audio recording on some Samsung Android Devices. Unfortunately it seems t ...

  9. jsp 格式化日期

    第一步,引入工具包: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %&g ...

  10. Java基础学习:8、构造器(构造方法)和this

    一.构造器: 1.定义:构造器是类的特殊方法,它的主要作用是完成对象的初始化.          即在创建对象时初始化对象.   本质是方法. 2.特点: a.方法名和类名一致. b.无返回值. c. ...