iOS证书那些事儿

·  阅读 1296

在上架和发布iOS app的过程中,对一些概念总是搞不清楚,亦或者有一些疑问,比如苹果对app有绝对的控制权,必须通过App Store才能下载, 是如何做到的呢?

什么是Provisioning Profiles?

简单来说,Provisioning Profiles(以下简称pp文件)的主要目的就是为了让我们可以进行在真机上测试app,我们可以用pp文件发布app在真机上调试app,或者发布给测试同事使用。

下图是开发者pp文件中包含的内容,主要有3个部分:

  • Certificates
  • Apple ID
  • Devices

Certificate(证书)

证书主要目的是用来验证app,证书背后的签名机制,使用的是非对称加密的技术。

在创建证书之前,我们需要先在mac电脑上生成Certificate Signing Request(CSR)文件,这个文件包含了一对私钥和公钥,私钥保存在本机的keychain中,而公钥需要上传到苹果服务器中,用于生成证书。

证书主要包括Development和Distribution两类,前者用于开发调试应用程序,后者用于发布,如In-House、Ad Hoc、App Store等。

Apple ID

Apple ID,对应于工程中的Bundle Identifier,包含了两个部分的字符串,如com.xxxx,主要用来识别1个或多个开发团队中的app,可以使用通配符(*)来匹配多个app。

Devices

标识可以运行该app的设备列表。

iOS签名机制是如何运作的?

这里讲两种发布app的签名机制,签名机制可以通过非对称加密与证书

上架App Store

这个其实相对简单,当我们要发布app时,会将app上传到苹果服务器,苹果会使用私钥来加密app,生成app签名,对应的公钥则是内置在每一台iOS设备中的。

当iOS设备从App Store下载后,使用设备中的公钥去验证app,验证正确则说明该app是苹果认证过的,可以放心安装。

真机调试

真机调试的频率会非常高,如果每次都上传到苹果服务器去加密,那么双方的效率都会很低,于是就有了这种方式来保证分发测试也是在苹果的控制范围内。

这里的前提就是前面所提到的provisioning profile,这里为了描述清楚,我们将前边本机生成的公私钥为公钥Local和私钥Local,苹果的公私钥为公钥Apple和私钥Apple。

  1. 我们将公钥Local上传到苹果服务器后,会被苹果使用私钥Apple进行签名,得到的证书就被放在provisioning profile中。

  2. 每次编译完成后,xcode使用私钥Local对app进行签名,同时将provisioning profile打包进app中,会改名为embedded.mobileprovision,并将app安装到iOS设备上。

  3. 在安装过程中,iOS设备会使用公钥Apple来验证embedded.mobileprovision中的数字签名是否正确,如果验证成功,则取出里边的各种数据,验证app和其他数据,使用证书中的公钥Local来验证app的签名,验证没问题后就可以正常运行了。

参考文章

  1. What is a provisioning profile & code signing in iOS?
  2. 细谈证书与Provisioning Profile
  3. 代码签名探析
  4. 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
  5. 浅析 iOS App 签名机制
  6. 非对称加密与证书
分类:
iOS
标签:
收藏成功!
已添加到「」, 点击更改