完整文章列表:
iOS的签名与证书机制(一):加密解密
iOS的签名与证书机制(二):单向散列函数
iOS的签名与证书机制(三):数字签名与证书
iOS的签名与证书机制(四):iOS的签名
iOS签名机制的目的是保证安装到用户手机上的App都是经过Apple官方允许的;
把App安装到用户手机上目前有两个途径,
- 通过ipa包安装,包括Xcode调试,TestFlight等等.
- 用户从Appstore下载安装到手机
这两种途径对应的签名机制不太一样,我们会分开说明;
1. 使用ipa包安装
我们在真机调试App,或者打包上线App之前,都需要在开发者账户中配置下面的内容,
- 使用Mac设备生成CertificateSigningRequest.certSigningRequest文件;
- 获得ios_development.cer或者ios_distribution.cer证书;
- 添加device的UDID,添加App的BundleID;
- 获取最终的.mobileprovision文件;
Apple为什么要设计这些文件与步骤,它们的内容和作用是什么呢?
我们先来看一个ipa包中包含什么内容:
- .mobileprovision文件(开发者账号配置完毕后生成)
- App内容(xib,图片资源,mach-o等等)
- 签名证书文件
我们再来看看编译生成ipa包Xcode做的事情:
我们可以看到在编译完App的内容文件后,还需要进行Sign操作,然后生成上述的签名证书文件;
下面来剖析整个签名的流程;
在整个流程中,有两个密钥对,一个是Mac的公钥与私钥,一个是Apple的公钥与私钥,要说明的是:
- 每台iPhone设备中已经有了Apple的公钥;
-
从第5步解析解析出的AppID等信息,会与App本身的内容进行对比验证,如果不一致,也不会安装成功;
看完了流程图,我们再通过实际的操作来对应说明一下:
- 在创建证书之前,我们需要上传一个CertificateSigningRequest.certSigningRequest文件,这个就是Mac的公钥,虽然没有显示,Mac的私钥也同时产生了.
公钥上传到Apple服务器,经过Apple私钥签名,生成证书供我们下载;
- 在配置好AppID,DeviceID后,生成.mobileprovision文件,然后下载到本地使用;
2. 从Appstore下载安装
如果用户是直接从Appstore下载的App,因为不涉及到Mac电脑这一角色,因此没有Mac的密钥对,验证签名的流程就相对简单;如果使用iFunbox查看下载的ipa包,是没有.mobileprovision文件的.
好了,看完最终章,不知道小伙伴是否对iOS签名有了一些了解呢?有想法的话,请下方留言.