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