为什么要创建证书

一、代码签名需要

  • 代码签名的目的是让 iOS 系统对将要运行在其上的 APP 放心。

二、iOS 操作系统验证开发者身份和 APP 完整性

  • 只要 iOS 操作系统拿到手中的证书的确是 CA 颁发的,那么证书中的公钥就一定是开发者的公钥。iOS 操作系统通过证书来验证开发者身份。通过用开发者的公钥对代码进行解签名,验证 APP 完整性。
  • 创建证书的目的就是让借助 CA 来让 iOS 操作系统拿到真正的开发者的公钥,以此去对代码进行解签名。

关于数字签名:

  • CA 对保存有开发者公钥的证书签名的目的:让 iOS 系统知道自己拿到的公钥是真实开发者的公钥
  • 开发者对代码签名的目的: 然 iOS 系统对将要运行在其上的 APP 放心。

代码签名:

  • 代码签名需要:证书+私钥,缺一不可
  • xcode将使用证书文件和对应的私钥给代码签名。
  • 在 xcode 的 code signing identity 当中导入相关证书后
  • xcode 还会去mac 电脑中寻找证书中公钥对应的私钥
  • 然后 xcode 来为代码进行签名
下面解释一下证书为什么要被 CA 签名,代码为什么要被开发者签名:
  1. 在 iOS 系统以及其它 Mac 设备内部,都拥有苹果的根证书 AppleWWDRCA.cer,里面包含了 AppleWWDRCA的公钥。
  2. iOS 系统用AppleWWDRCA的公钥对证书(.cer)中包含的数字签名(该签名是AppleWWDRCA用自己的私钥对证书签名的)进行解密,如果成功得到信息摘要 Signature1(经过 AppleWWDRCA使用私钥加密过的),则说明了证书的可信性。
  3. 然后对证书内容使用证书声明的哈希算法,计算出一个信息摘要 Signature2。
  4. 如果 Signature1 == Signature2,则说了明证书的完整性。
  5. 即 CA 用自己的私钥对证书签名的目的就是为了保证 iOS 系统拿到手中的是CA 自己颁发的权威证书,保证别人不能冒充 CA。
  6. iOS 系统用 CA 公钥解开证书上 CA 的私钥签名后,对照摘要一致后,就能确定这个证书就是 CA 颁发的。
  7. 数字签名的目的是保证通信双方没有被冒充。
  8. CA 签名是让 iOS 系统知道这个证书是 CA 颁发的
  9. 代码签名是让 iOS 系统知道这个 APP 的确是合法开发者编写的
  10. 在证书可信的前提下,iOS 系统成功提取出证书中包含的用户的真实公钥 Public Key。这个公钥就可以用于检验代码签名,或者用于加密通信。
  11. 用真实的用户公钥对 CodeSignature 里面所有代码/资源签名进行解密,得到一系列信息摘要 Signature-a1、Signature-b1、Signature-c1 etc.
  12. 假如所有信息摘要都正确被机密出来,则表明代码、资源文件是可信的,是完整的,能够合法地在该设备上运行。

你可能感兴趣的:(为什么要创建证书)