iOS签名机制流程图
image不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤
-
生成CertificateSigningRequest.certSigningRequest文件
-
获得ios_development.cer\ios_distribution.cer证书文件
-
注册device、添加App ID
-
获得*.mobileprovision文件
首先有三个角色mac 设备 apple后台 iOS设备
首先mac设备生成一对mac公钥mac私钥
apple后台就是apple的服务器也会生成一对公钥私钥,私钥保存在apple的后台,公钥在每一天iOS设备上,相当于每一台iOS设备都有一个相同的苹果公钥
-
第一步。app(mach-o可执行文件也就是项目的源代码,第二个包含图片资源,mp3资源,视频资源,storyBoard,xib等等这些资源)这些东西最终都会变成一个ipa包装到我们手机上。
app文件经过mac电脑的私钥进行签名生成两个文件 ,一个是签名(这个签名是把你的app的内容 生成一个散列值用mac私钥进行加密)然后加上你原来的app文件
-
第二步需要做一个生成证书的操作,证书是CA利用自己的私钥对你的公钥进行签名,这里面apple就是一个CA认证机构,apple这个CA对你的mac公钥进行一个签名然后生成一个证书,这个证书就是对mac公钥进行一个签名,证书里面也是包含两个文件一个是mac公钥原文件,一个是用apple私钥加密的签名,生成证书以后他会加上设备ID(devices),app id,entitlements(就是一些权限)。
-
第三步就是他拿到第二步生成的证书还有设备ID(devices),app id,entitlements这些经过apple的私钥在进行一个签名,这里面生成的签名就是步骤2里面的证书文件加上设备ID(devices),app id,entitlements,生成的一个签名文件,当然还包含原来的设备ID(devices),app id,entitlements,那么这个签名加上原来那一堆设备ID(devices),app id,entitlements和证书就生成一个moblieProvision文件
-
第四步,经过这一系列操作以后相当于你的ipa里面(也就是第一步说的ipa文件)包含了app文件(代码mach-o,视频,图片等等),还有这些app数据文件对应的一个签名,再加上一个moblieProvision文件
这时候假设要把上面步骤生成的ipa文件装到我们的手机上他会进行一个验证操作,由于我们的iOS设备有一个apple官方的公钥,他会拿到apple官方的公钥去验证moblieProvision文件里的那个签名,为什么要验证这个签名,因为当初这个签名是拿apple私钥签的,如果这个签名没有问题,说明步骤三里的签名加上原来那一堆设备ID(devices),app id,entitlements和证书没有问题,那么接下来他就要验证设备ID(devices),app id,entitlements,会验证设备ID(devices)是不是包含,app id和你步骤一里面的app文件里的id是不是相同,然后看entitlements和你app文件里执行的文件是不是相同
接下来他需要用apple公钥验证一下moblieProvision文件的证书(就是)第二步里生产的mac公钥和mac公钥经过apple私钥签名的的文件那个证书。如果这步没问题说明mac的公钥是合法的 ,然后拿到这个mac合法公钥进行验证签名,进行app签名文件代码验证签名,为什么要用mac公钥验证,因为当初这个app签名文件是用mac私钥进行的签名,如果没问题的话说明代码是没问题的,说明代码没被别人修改,那么程序就可以安装了
网友评论