签名机制

保证安装到用户手机上的APP都是经过Apple官方允许的

概述

不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤

  • 生成CertificateSigningRequest.certSigningRequest文件
  • 获得ios_development.cer\ios_distribution.cer证书文件
  • 注册device、添加App ID
  • 获得*.mobileprovision文件

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

Apple各设备中包含的密钥

Mac设备

  • Mac公钥
  • Mac私钥

App后台

  • Apple私钥

iOS设备

  • Apple公钥

具体流程

  1. Mac私钥APP进行数字签名,生成App代码以及签名
  2. Apple私钥Mac公钥进行证书签名,生成Mac公钥以及对应的Mac公钥散列值加密后的值,也即是证书
  3. Apple私钥对第2步生成的证书以及app identitlementsdevices进行数字签名,生成对应的数字签名证书以及app identitlementsdevices的明文,这一步也就是生成描述文件
  4. Apple公钥对第3步的描述文件中的数字签名进行验证,验证通过之后,可以拿到里面的证书。然后再用描述文件中的App信息对App的信息以及手机设备信息进行校验。
  5. Apple公钥对第4步中拿到的证书进行数字签名验证,验证通过之后可以拿到证书里面的Mac公钥
  6. 用第5步中拿到的Mac公钥对App进行数字签名校验,验证通过之后就说明可以在真机上面运行。

如何获取Mac公钥

.certSigningRequest文件,就是Mac设备的公钥。简称CSR文件。

获取证书





.cer文件:利用Apple私钥(CA),对Mac公钥生成的数字签名

生成mobileProvision





.mobileprovision文件:利用Apple私钥(CA),对[.cer证书、devices、app id、entitlements]进行数字签名

App启动时需要做的安全检测

AppStore

从AppStore下载安装的APP,你会发现里面是没有.mobileprovision文件的。
它的验证流程会简单很多,大概如下所示

  1. APP上传到Apple Connect之后,Apple会用Apple私钥APP进行签名
  2. 当我们启动App的时候,只需要通过Apple公钥对安装包进行验证。

App其他渠道

P12文件

P12一般用于团队开发当中,当我们用大于三个Mac设备开发应用时,想要申请新的证书,如果在我们的证书里,包含了3个发布证书,2个开发证书,可以发现再也申请不了开发证书和发布证书了。(具体的限制可能随时变)
P12中包含哪些信息

  • Mac私钥
  • 证书
    • Mac公钥
    • Apple私钥Mac公钥签名