iOS证书签名
苹果官方有一对密钥,即私钥和公钥,私钥在苹果后台,公钥在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的安装行为是受到苹果管控的。
iOS证书签名的更多相关文章
- IOS证书/私钥/代码签名/描述文件
1. 相关资源 (1) 钥匙串程序(常用工具->钥匙串),用于创建证书请求.安装证书.导出私钥等 (2) IOS开发中心:https://developer.apple.com/de ...
- iOS 证书与签名 解惑详解
iOS 证书与签名 解惑详解 分类: iPhone2012-06-06 19:57 9426人阅读 评论(1) 收藏 举报 iosxcodecryptographyappleiphone测试 目录 ...
- iOS代码签名理解
前言 做了几年iOS app coder了,对于证书的生成.使用流程烂熟于心,然而对于这套机制的原理却一直不甚理解.近来由于工作需要仔细研究了一下,特将自己的学习经验记录于此,以供大家学习指正. 问题 ...
- IOS证书的申请和使用
苹果的证书繁锁复杂,制作管理相当麻烦,今天决定重置一个游戏项目中的所有证书,做了这么多次还是感觉很纠结,索性直接记录下来,日后你我他查阅都方便: 关于证书 苹果使用密文签名技术来验证App的合法性,不 ...
- ios证书
内容提要: 安装app时提示 “无法下载应用,此时无法安装“XXX””.我遇到过多次是由于ios的app出现证书问题.本篇文章讲解用ios证书制作过程,以及每个步骤的解释. 正文: Xcode签名至少 ...
- iOS 证书调试的理解(Personal)
证书签名 证书:众所周知,我们申请一个Certificate之前,需要先申请一个Certificate Signing Request (CSR) 文件,而这个过程中实际上是生成了一对公钥和私钥,保存 ...
- 阐明iOS证书和provision文件
译:阐明iOS证书和provision文件 许多iOS开发人员都会和你说在iOS开发很困惑的问题之一,将app真正运行在真实的设备(iPhone iPad而不是模拟器),因为所有的这些都会涉及从苹果获 ...
- iOS证书详解--再转
一.成员介绍1. Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1) Developer Certification(开发证书)安装在电脑上 ...
- (转)iOS 证书、密钥及信任服务
iOS 证书.密钥及信任服务 ——翻译自Apple Reference<Certificate,Key,and Trust Services Programming Guide> 本章描述 ...
- iOS 证书那些事
关于开发证书配置(Certificates & Identifiers & Provisioning Profiles),相信做iOS开发的同学没少被折腾.对于一个iOS开发小白.半吊 ...
随机推荐
- uniapp 提示 打包时未添加 push模块
最近打包上架的 ios项目 启动项目提示打包时未添加 push模块 在uniapp manifest中可以配置消息推送,可以我们项目没有用到这个功能,真是日狗了,排除半天仔细检查了使用Push ...
- Ubuntu上安装TensorFlow
一.更新环境 sudo apt-get update sudo apt-get install golang python3-dev python-dev libcupti-dev libjpeg- ...
- mybatis处理一对多的映射关系
实体类 package org.example.entity; import java.util.List; public class Dept { private Integer deptId; p ...
- windows的lib与dll
mingw编译出来的动态库的导入库可以直接在vc中直接使用 静态库 lib .a 动态库 dll动态库导入库 lib .dll.a 静态链接库a) 静态链接库的类和函数不需要导出,就能够被其他库调用. ...
- [Maven] 引入依赖以后如果标红怎么办
- 使用Java API操作Neo4j
使用IntelliJ IDEA (Jet Brains) 创建java工程 把下载好的neo4j包中的lib文件下的所有jar文件复制到工程Neo4j_Project的lib文件夹下(若无lib文件夹 ...
- 数据每三位增加一个逗号(即千分符) js
使用 toLocaleString() 另一种使用场景
- VUE学习-列表渲染
列表渲染 v-for <!-- v-for="(v,k,i) in arr/obj" --> <ul id="app"> <li ...
- vmware网络连接
vmware提供桥接模式网络连接.网络地址转换 (NAT).仅主机模式网络连接和自定义网络连接选项,用于为虚拟机配置虚拟网络连接.在安装 vmware 时,已在主机系统中安装用于所有网络连接配置的软件 ...
- function的length,就是第一个具有默认值之前的参数个数。
一个拥有 length 属性和若干索引属性的对象就可以被称为类数组对象,类数组对象和数组类似,但是不能调用数组的方法.常见的类数组对象有 arguments 和 DOM 方法的返回结果,还有一个函数也 ...