iOS签名机制
Contents
姐妹篇
iOS签名机制
-
iOS签名机制的作用
- 保证安装到用户手机上的APP都是经过Apple官方允许的
-
不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤
- 生成CertificateSigningRequest.certSigningRequest文件
- 获得ios_development.cer\ios_distribution.cer证书文件
- 注册device、添加App ID
- 获得*.mobileprovision文件
-
对于真机调试,现在的Xcode已经自动帮开发者做了以上操作
-
思考
- 每一步的作用是什么?
- .certSigningRequest、.cer、.mobileprovision文件究竟里面包含了什么?有何用处?
签名流程
-
首先我们需要三个角色,Mac设备 ,苹果后台, iOS设备
- Mac设备要生成一对公钥私钥
- 苹果后台也有一对公钥私钥,私钥保存在苹果后台
- 每一台iOS设备上,都有苹果的公钥
-
Mac对App打包时,要对App包进行签名(用Mac的私钥签名)。 签名后生成:
- App包
- 对App包的散列值签名的签名文件
-
Mac的公钥上传至苹果后台后,苹果会用自己的私钥对Mac的公钥进行签名, 签名后生成:
- 用苹果私钥对Mac公钥签名的签名文件 (.cer 文件)
-
接着苹果后台,会使用其私钥对包括 .cer文件,devices,Appid, Entitlements在内文件再次数字签名,并生成
- .mobileprovision 文件
- 文件包含 Mac公钥的数字签名,devices,Appid, Entitlements**
- 以及对以上文件,苹果私钥签名后的数字签名
- .mobileprovision 文件
-
在App 安装进iOS设备时, iOS设备首先会用苹果的公钥对.mobileprovision 文件进行解密
- 如果签名验证通过, 则能接触 Mac公钥签名, devices, AppId, Entitlements等信息
- 如果验证失败, 则会安装失败
-
接下来,还是需要 苹果的公钥 对 Mac的公钥签名信息进行解密
- 如果签名验证通过, 则能拿到可以确保没有问题的Mac的公钥信息
- 如果验证失败, 则会安装失败
-
接下来一步,就是利用 Mac的公钥信息验证安装包中的签名(因为Mac打包App时,是使用的自己的私钥进行加密的)
- 如果签名验证通过, 则可以解出App 的 mach-o文件,资源文件等
-
Mac生成证书操作
-
先回忆一下,Alice 和 Bob通信过程中,发送公钥经过CA机构签名的过程
- 证书生成过程,是Bob在向Alice,发送公钥时,为了避免 中间人攻击, 而向CA认证机构注册公钥。
- CA认证机构 用自己的私钥施加数字签名,并生成证书
- Alice,在CA认证机构处,得到带有Bob方公钥的数字签名
- Alice,使用CA机构的公钥,验证数字签名是否有效,确保Bob公钥的合法性
- Alice,使用接收方的公钥加密,发送消息
-
在Mac 生成证书过程中
- 苹果就充当CA认证机构
- 第一步,mac生成 .certSignRequest 文件,其实就是 Mac 的公钥
- 第二步,上传.certSignRequest 文件, 就是苹果后台用自己的私钥,对Mac的公钥进行数字签名
- 第三步,生成**.cer文件**, 也就是**苹果后台用自己的私钥**,对**Mac的公钥签名**后的**证书**文件
-
.mobileprovision文件
- 生成.mobileprovision文件的过程,就是选择完 AppID, .cer文件 , devices之后,苹果后台又一次对上述文件用自己的私钥,进行签名的过程,签名之后生成.mobileprovision文件
-
总结:
- .certSigningRequest文件
- Mac的公钥
- .cer文件
- 利用苹果的私钥(CA), 对Mac的公钥签名,生成的数字签名证书
- .mobileprovision文件
- 利用苹果私钥, 对【.cer + devices + AppID + entitlements】进行数字签名,生成的文件
AppStore下载的App
-
如果APP是从AppStore下载安装的,你会发现里面是没有mobileprovision文件的
-
它的验证流程会简单很多,大概如下所示
Author 飞熊
LastMod Jun 05