1、基本概念

iOS签名机制的作用是保证安装到用户手机上的App都是经过Apple官方允许的。不管是真机调试,还是发布App,开发者都需要经过一系列复杂的步骤:
生成 CertificateSigningRequest.certSigningRequest 文件
获得 .cer 证书文件
注册 device、添加 App ID
获得 .mobileprovision 文件
对于真机调试,现在Xcode已经自动帮开发者做了以上操作。

2、签名机制流程

签名过程中有如下几个角色:
image.png
签名机制流程度如下:
image.png
签名流程:
第一步:将Mac的私钥利用Apple的私钥进行签名得到证书文件(包含Mac公钥和签名)
第二步:将证书文件和Devices、AppID、Entitlements利用App私钥签名得到.mobileprovision文件(包含证书、Devices、AppID、Entitlements和签名)
第三步:编译程序时,会生成App文件,并将App文件利用Mac的私钥进行签名,得到App文件的签名。
截屏2022-06-05 21.57.17.png

App文件的签名保存在CodeSignature中,Mach-O文件的签名在Mach-O文件里面。 第三步编译时用Mac的私钥加密是因为本地签名比较快捷。

验签流程:
第一步:利用Apple的公钥,验证.mobileprovision文件中的签名,确保.mobileprovision内部的证书等文件没有被篡改。(同时也会验证Devices等数据)
第二步:利用Apple的公钥,验证证书文件中的签名,确保证书中的Mac公钥没有被篡改。
第三部:利用Mac公钥,验证App文件的签名,确保App文件没有被篡改。
当验证流程通过后,App就可以正常安装启动了。

2、具体步骤

2.1、生成Mac设备的公私钥

image.pngimage.png
CertificateSigningRequest.certSigningRequest文件就是Mac的公钥

2.1、获得证书

image.pngimage.png
image.pngimage.png
image.pngimage.png
ios_development.cer、ios_distribution.cer文件,就是利用Apple后台的私钥,对Mac设备的公钥进行签名后的证书文件。对应签名流程的第一步。

2.3、生成mobileprovision文件

image.pngimage.png
image.png
对应签名流程的第二步,mobileprovision文件包含了设备、权限和AppID信息。

2.4、总结

.certSigningRequest文件:MAC的公钥
.cer文件:利用Apple私钥(CA),对Mac公钥生成了数字签名
.moblieprovision文件:利用Apple的私钥,对.cer证书+devices+AppID+entitlements进行数字签名

3、AppStore

如果App是从AppStore下载安装的,是没有mobileprovision文件的,这是因为从AppStore的验证流程会很简单很多,如下图所示:
image.png

4、P12文件

在团队协作时,需要将证书导出为.p12文件,发送给其它人员使用,实际上导出了Mac的公钥,当其它人员编译代时,使用了p12中Mac的公钥对App文件签名进行签名。