笔记-iOS 签名机制

写这篇文章的开头是因为一个同事问了我一个问题,

他说如果iOS证书过期了,我们debug包就打不开了,那么appstore下载的包会怎么样呢?

关于证书的概念好像只有:从钥匙串生成CSR文件、上传到apple开发者中心、然后下一步、下一步、select...然后直接生成下载,过期了就重新配一下,感觉都知道又好像只知道这样的一个过程,直到翻了翻资料(李明杰底层原理(上)),才把证书、描述文件、签名...这些彻底弄明白了,如果你和我一样,只知道一个配置,那建议还是看一看这篇文章。

来源:底层原理(上)
学习路线
加密解密 -> 单项散列函数 -> 数字签名 -> 证书 -> iOS签名机制


一、关于加密

根据密码的类型分类:对称加密非对称加密

  • 对称加密:加密、解密使用相同的密钥
  • 非对称加密:加密、解密使用不同的密钥(公钥、私钥),也被称为公钥加密
  • 对称加密优缺点
优点:加密、解密速度快

缺点:不能很好地解决密钥配送问题
对称加密
  • 非对称加密特点、优缺点
特点
- 加密密钥:一般是公开的,因此该密钥称为公钥
- 解密密钥:由消息接收者自己保管,不能公开,因此称为私钥
- 公钥、私钥是一一对应的,不能单独生成

优点:能解决密钥配送问题

缺点:加密、解密速度慢

密钥配送
- 由消息的接受者,生成一对公钥、私钥
- 将公钥发给消息的发送者
- 消息的发送者使用公钥加密消息
非对称加密
  • 混合加密
- 将 ‘对称加密’ 和 ‘非对称加密’ 的优势相结合

优点
- 解决了 ‘非对称加密’ 速度慢的问题
- 通过 ‘非对称加密’ 解决了 ‘对称加密’ 的密钥配送问题

说白了就是
- 用 ‘对称加密’ 对传输数据进行加密;
- 用 ‘非对称加密’ 对 ‘对称加密’ 的密钥进行加密。

二、单向散列函数

单向散列函数,又被称为消息摘要函数(message digest function),哈希函数

  • 特点及作用
特点
- 根据任意长度的消息,计算出固定长度的散列值
- 计算速度快
- 消息不同,散列值也不同
- 具备单向性

作用:防止数据被篡改✨✨✨✨✨

说白了,就是不管对多长的内容进行计算,都能得到相同位数的一串数字,例:

MD5 ("123")                            = 202cb962ac59075b964b07152d234b70
MD5 ("123456789012345678901234567890") = a46857f0ecc21f0a06ea434b94d9cf1d

tips:可直接在Mac终端查看,使用该命令。
- md5 -s "xxxx"
  • 常见的几种单向散列函数
MD5、SHA-1、SHA-2、SHA-3等

三、数字签名(注意:这里与数字证书区别对待)

  • 消息发送者产生,别人无法伪造的一段数字串;(用私钥加密消息的散列值,生成的结果)
  • 同时也是对信息的发送者发送信息真实性的一个有效证明
如何能保证这个签名是消息发送者自己签的?
- 用消息发送者的私钥进行签名

如果有人篡改了文件内容或者签名内容,会是什么结果?
- 签名验证失败,证明内容会篡改

数字签名不能保证机密性?
- 数字签名的作用不是为了保证机密性,仅仅是为了能够识别内容有没有被篡改


数字签名的作用
- 确认消息的完整性
- 识别消息是否被篡改
- 防止消息发送人否认


数字签名无法解决的问题:中间人攻击,如果遭遇了中间人攻击,那么
- 公钥将是伪造的
- 数字签名将失效
数字签名的过程.png
数字签名的过程改进-I.png
数字签名的过程改进-II
中间人攻击-数字签名无法解决的问题.png

四、证书

利用CA的私钥,对其他人的公钥生成数字签名

作用:解决中间人攻击(避免公钥被拦截)✨✨✨

- 密码学中的证书,全称叫公钥证书(Public-key Certificate,PKC),跟驾驶证类似
- 里面有姓名、邮箱等个人信息,以及此人的公钥✨✨✨
- 并由认证机构(Certificate Authority,CA)施加数字签名✨✨✨

证书主要内容:个人信息、公钥、权威机构的数字签名

用自己的话说:
就是CA用自己的私钥对你的公钥进行认证,其他人用CA的公钥签名的合法性
证书.png
注册与下载.png

五、iOS签名机制

作用:保证安装到手机上的App都是经过Apple官方允许的

苹果充当了CA机构

不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤
- 生成CertificateSigningRequest.certSigningRequest文件
- 获得ios_development.cer\ios_distribution.cer证书文件
- 注册device、添加App ID
- 获得*.mobileprovision文件

对于真机调试,现在的Xcode已经自动帮开发者做了以上操作

思考
每一步的作用是什么?
.certSigningRequest、.cer、.mobileprovision文件究竟里面包含了什么?有何用处?
公钥、私钥持有者
签名机制流程图
  • 如果从AppStroe下载的,里面没有mobileprovision文件,只有 I 和 VII
解释
1、Mac设备的公钥
- 从钥匙串生成CSR文件,就是生成公钥的过程

2、生成证书
- 把公钥(CSR文件)上传到Apple后台
- 利用Apple后台的私钥,对Mac设备的公钥进行签名后的证书文件

3、mobileprovision描述文件生成
- 选择app id
- 选择devices

六、重签名

  • 查看codesign用法
man codesign
  • 重签名步骤
1、准备一个embedded.mobileprovision文件(必须是付费产生的,aphid、device一定要匹配),并放入app中
- 可以通过Xcode自动生成,然后在编译后的App包中找到
- 可以去开发者证书网站下载

2、从embedded.mobileprovision文件中提取出embedded.plist权限文件
- security cms -D -I embedded.mobileprovision > temp.plist
- /usr/libexec/PlistBuddy -x -c 'Print :Entitlement' temp.plist > embedded.plist

3、查看可用的证书(可以看到证书ID)
- security find-identity -v -p codesigning

4、对.app内部的动态库、AppExtension进行签名
- codesign -fs 证书ID xxx.dylib

5、对.app包进行签名
- codesign -fs 证书ID --entitlements entitlements.plist xxx.app
  • 过程
1、当前app的devices中不包含设备b
2、重新生成一个embedded.mobileprovision,包含设备b,
3、用步骤二中的embedded.mobileprovision替换步骤一种的embedded.mobileprovision
1、查看Mac中的可用证书及ID
2、从embedded.mobileprovision文件中提取出plist权限文件
3、转换成embedded.plist权限文件
4、将图3生成的embedded.plist文件与待签名的ipa放到一个文件夹进行签名

5、将文件夹压缩,修改类型为.ipa类型

重签名GUI工具

参考文章

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