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开发小白.半吊 ...
随机推荐
- c# 游戏设计:地图移动
想实现一个小游戏,先做地图移动.步骤记录如下: 1.百度到一张大的迷宫地图,放在项目的debug目录下,备用. 2.创建一个winform项目,不添加任何界面元素. 3.添加数据成员如下: Pictu ...
- 时间戳转换为yyyy-MM-dd格式
原文链接https://blog.csdn.net/hu104160112/article/details/111167033
- ubuntu docker pull 失败 Error response from daemon: Get https://registry-1.docker.io/v2/
问题: ubuntu@VM-3-4-ubuntu:~$ docker pull tensorflow/tensorflow:2.3.4-gpuError response from daemon: G ...
- windows搭建minikube环境学习Kubernates
1.使用powershell下载minikube New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory -Force Invoke-Web ...
- vscode开发vue3+ts环境搭建
一.开发环境准备 1.nvm 2.vscode 3.node 4.chome 5.git 6.npm install -g yarn tyarn 7.tyarn global add commitiz ...
- dfs-入门模板
模板 void dfs()//参数用来表示状态 { if(到达终点状态) { ...//根据题意添加 return; } if(越界或者是不合法状态) return; if(特殊状态)//剪枝 ret ...
- Unity 性能分析小工具
下文有两个方法,分别是一段检测执行过程耗费时间的代码,还有一个是保存和加载Unity Profiler 的代码(因为UnityProfiler 只能显示一部分的数据,如果运行时间长的话有部分分析数据查 ...
- maven项目pom.xml报未找到指定路径文件
解决方法: 错误环境:Tomcat7 + Eclipse + Maven + Spring + SpringMvc + Mybatis 错误描述: 错误解决步骤: 1.找到eclipse的projec ...
- js 监听 变量变化
var o = {};setTimeout(function () { o.abb = '2';}, 4000);Object.defineProperties(o, { abb: { configu ...
- ntpq 详解
Gentoo(也许其他发行版也是?)中 "ntpq -p" 的 man page 只有简短的描述:"打印出该服务器已知的节点列表和它们的状态概要信息." 我还没 ...