iOS应用包签名原理

应用签名我们从三个方面来进行讲解

1. 代码签名

2. 双层代码签名

3. 描述文件


一 代码签名

代码签名是对可执行文件或脚本进行数字签名,用来确认软件在签名后未被修改或损坏的措施。和数字签名原理一样,只不过签名的数据是代码而已。


我们先假设一下:苹果官方希望保证每一个安装到iOS上的APP都是经过他们允许的,他们会这样做,苹果官方生成一对非对称的公私钥,在iOS系统中内置一个公钥,私钥保留在苹果后台,我们传APP到AppStore时,苹果后台用私钥对APP数据进行签名,iOS下载这个APP时用公钥进行解密,验证签名,弱解密成功,这个肯定就是由苹果后台认证的,并且没有被修改过,也就达到了苹果的需求,每一个APP都是经过苹果官方允许的。可是


此种简单的代码签名方式,如果苹果的软件下载只有一个appStore渠道下载,那么代码签名就能保证应用安全了,可是唯一下载渠道是不可能的。就比如对于我们开发者iOSER而言,我们需要在开发APP时进行真机调试,而且苹果还开放了企业内部分发的渠道,企业证书签名的APP也是需要顺利安装的,这就导致简单的代码签名是无法满足要求的。


我们再来分析一下苹果的需求

1安装包不需要上传到AppStore,可以直接安装到手机上

2 苹果为了保证系统的安全性,又必须对安装的APP有绝对的控制权(经过苹果允许的才能安装,不能被滥用导致非开发APP也能被安装)


为了实现这些需求,iOS签名的复杂度就开始增加了,苹果在这里给的方案是双层代码签名。


二 双层代码签名

首先我们来看一张图


这张图可以看到双层代码签名的整个过程,下面我们来分析一下这张图


Mac电脑 :我们自己开发用的电脑

苹果服务器: 苹果开发者中心

iPhone : 我们开发用的手机


1 首先我们的开发用的电脑mac系统中生成非对称加密算法的一对公钥/私钥(我们的Xcode帮忙办了),在图上我们成为公钥M和私钥M

2 苹果自己有固定的一对公司钥,上文已经说过了,私钥在苹果后台,公钥在iOS系统的手机上,在这里我们在苹果服务器上的成为私钥A,iPhone手机上成为公钥A。

3 把公钥M以及一些你的开发者信息传到苹果后台(我们申请的CSR文件),苹果后台用私钥A去签名公钥M以及其他开发者数据,这样得到了一份数据包含了公钥M以及其签名,这份数据我们称为开发证书。

4 在开发时,编译完一个APP后,用本地的私钥M(也就是我们常说的P12文件)对这个APP进行签名,同时将前面得到的开发证书一起打包进APP里,安装到手机上。

5 在安装时,iOS系统取到这个开发证书,通过内置的公钥A来解密验证数字签名是否正确。

6 验证证书后确保了私钥M是苹果认证的,再用开发证书中解密后获取到的公钥M去解密验证APP签名,这样就间接的验证了安装行为是否是经过苹果官方允许的(这里只验证了安装行为,不验证APP是否被改动,是因为在开发阶段,APP代码内容是不断被更改的)。


上面的过程,已经可以保证开发者的认证和程序的安全性了,但是,细心的朋友会发现,这样的过程进行下去的话,会出现只要有了开发证书,那就能安装到所有的iPhone手机上了。不着急,接着看上图中的描述文件,上面的过程我们还没有提到过,现在我们来说下这个描述文件。


三 描述文件

描述文件(Provisioning profile)一般包括三样东西:证书、App ID、设备。当我们在真机运行或者打包一个项目的时候,证书用来证明我们程序的安全性和合法性。AppID和设备证明这个APP是可以安装在这台iPhone设备上的。

苹果为了解决应用滥用的问题,所以苹果又加了两个限制.

第一限制在苹果后台注册过的设备才可以安装.

第二限制签名只能针对某一个具体的APP.

并且苹果还想控制App里面的iCloud/PUSH/后台运行/调试器附加这些权限,所以苹果把这些权限开关统一称为Entitlements(授权文件).并将这个文件放在了一个叫做Provisioning Profile(描述文件)文件中.

描述文件是在AppleDevelop网站创建的(在Xcode中填上AppleID它会代办创建),Xcode运行时会打包进入APP内.所以我们使用CSR申请证书时,我们还要申请一个东西!! 就是描述文件!

在开发时,编译完一个 APP 后,用本地的私����钥M对这个APP进行签名,同时把从苹果服务器得到的 Provisioning Profile 文件打包进APP里,文件名为embedded.mobileprovision,把 APP 安装到手机上.最后系统进行验证。通过描述文件里的信息就可以判断这个APP是否可以安装在这台iPhone设备上。

总结:结合上面所描述的,我们现在就可以明确在开发时申请的一系列正书到底是什么,有什么作用,理解后我们就可以装逼啦,下篇文章我们讲解应用的重签名。我们就可以安装我们想要的APP咯。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342