苹果证书签名流程

签名目的

一定要保证每一个安装到iOS上的App都是经过苹果官方允许的

apple 签名

要实现这个需求很简单,最直接的方式,苹果官方生成一对公私钥,私钥由苹果后台保管,公钥内置到iOS设备里,在我们将App上传到App Store上时,苹果后台使用私钥对App进行签名,iOS设备下载这个应用后,用公钥验证这个签名,若签名正确,则说明这个App是经过苹果后台认证的,并且没有被修改过,这样也就达到了苹果的目的:保证iOS设备安装的每一个APP都是经过苹果官方允许的。

开发安装app签名

1、在你的 Mac 开发机器生成一对公私钥,这里称为公钥L,私钥L。L:Local
  2、苹果自己有固定的一对公私钥,跟上面 AppStore 例子一样,私钥在苹果后台,公钥在每个 iOS 设备上。这里称为公钥A,私钥A。A:Apple
  3、把公钥 L 传到苹果后台,用苹果后台里的私钥 A 去签名公钥 L。得到一份数据包含了公钥 L 以及其签名,把这份数据称为证书。
  4、在苹果后台申请 AppID,配置好设备 ID 列表和 APP 可使用的权限,再加上第③步的证书,组成的数据用私钥 A 签名,把数据和签名一起组成一个 Provisioning Profile 文件,下载到本地 Mac 开发机。
  5、在开发时,编译完一个 APP 后,用本地的私钥 L 对这个 APP 进行签名,同时把第④步得到的 Provisioning Profile 文件打包进 APP 里,文件名为 embedded.mobileprovision,把 APP 安装到手机上。
  6、在安装时,iOS 系统取得证书,通过系统内置的公钥 A,去验证 embedded.mobileprovision 的数字签名是否正确,里面的证书签名也会再验一遍.验证证书后确保了公钥L是苹果认证的,再用公钥L去验证App的签名,这样就间接验证了这个App安装行为是否经过苹果允许。
  7、确保了 embedded.mobileprovision 里的数据都是苹果授权以后,就可以取出里面的数据,做各种验证,包括用公钥 L 验证APP签名,验证设备 ID 是否在 ID 列表上,AppID 是否对应得上,权限开关是否跟 APP 里的 Entitlements 对应等。

解析

1、第 1 步对应的是 keychain 里的 “从证书颁发机构请求证书”,这里就本地生成了一对公私钥,保存的 CertificateSigningRequest 就是公钥,私钥保存在本地电脑里。
  2、第 2 步苹果处理,不用管。
  3、第 3 步对应把 CertificateSigningRequest 传到苹果后台生成证书,并下载到本地。这时本地有两个证书,一个是第 1 步生成的,一个是这里下载回来的,keychain 会把这两个证书关联起来,因为他们公私钥是对应的,在XCode选择下载回来的证书时,实际上会找到 keychain 里对应的私钥去签名。这里私钥只有生成它的这台 Mac 有,如果别的 Mac 也要编译签名这个 App 怎么办?答案是把私钥导出给其他 Mac 用,在 keychain 里导出私钥,就会存成 .p12 文件,其他 Mac 打开后就导入了这个私钥。
  4、第 4 步都是在苹果网站上操作,配置 AppID / 权限 / 设备等,最后下载 Provisioning Profile 文件。
  5、第 5 步 XCode 会通过第 3 步下载回来的证书(存着公钥),在本地找到对应的私钥(第一步生成的),用本地私钥去签名 App,并把 Provisioning Profile 文件命名为 embedded.mobileprovision 一起打包进去。这里对 App 的签名数据保存分两部分,Mach-O 可执行文件会把签名直接写入这个文件里,其他资源文件则会保存在 _CodeSignature 目录下。
第 6 – 7 步的打包和验证都是 Xcode 和 iOS 系统自动做的事。

备注:
  1、证书:内容是公钥或私钥,由其他机构对其签名组成的数据包。
  2、Entitlements:包含了 App 权限开关列表。
  3、CertificateSigningRequest:本地公钥。
  4、p12:当CER安装到本地并与本机的私钥吻合之后。我们一般会给证书做个备份,这个备份就是个P12文件。这个p12文件很好用,它不仅包含CER的信息,还有私钥信息,即:P12备份文件=CER文件+私钥;所以有了这个p12就再也不用担心证书丢失了,可以导入到其他电脑。
  5、Provisioning Profile:包含了 证书 / Entitlements 等数据,并由苹果后台私钥签名的数据包。

你可能感兴趣的:(iOS证书,签名,xcode,macos,ide)