iOS 开发 Certificate和Code Signing--证书与签名--详解

iOS 开发 Certificate和Code Signing–证书与签名–详解

1.Certificate-证书

iOS 开发 证书–根证书/申请证书/开发(发布)证书–详解

iOS 开发 Certificate和Code Signing--证书与签名--详解_第1张图片

2.Code Signing-签名

iOS 开发 code sign 代码签名深入剖析

iOS 开发 Certificate和Code Signing--证书与签名--详解_第2张图片

每个证书(其实是公钥)对应 Key Pair 中的私钥会被用来对内容(executable code,resources such as images and nib files aren’t signed)进行数字签名(CodeSign)——使用哈希算法生成内容摘要(digest)。

Xcode 使用指定证书配套的私钥进行签名时需要授权,选择【始终允许】后,以后使用该私钥进行签名便不会再弹出授权确认窗口。

3.Code Signing Identity-官方图解

iOS 开发 Certificate和Code Signing--证书与签名--详解_第3张图片

Xcode 中配置的 Code Signing Identity(entitlements、certificate)必须与 Provisioning Profile 匹配,并且配置的 Certificate 必须在本机 Keychain Access 中存在对应 Public/Private Key Pair,否则编译会报错。

Xcode 所在的 Mac 设备(系统)使用 CA 证书(WWDRCA.cer)来判断 Code Signing Identity 中 Certificate 的合法性:

  • 若用 WWDRCA 公钥能成功解密出证书并得到公钥(Public Key)和内容摘要(Signature),证明此证书确乃 AppleWWDRCA 颁布,即证书来源可信;
  • 再对证书本身使用哈希算法计算摘要,若与上一步得到的摘要一致,则证明此证书未被篡改过,即证书完整。

4.Verify Code Signature with Certificate-证书验证签名

公钥被包含在数字证书里,数字证书又被包含在描述文件(Provisioning File)中,描述文件在应用被安装的时候会被拷贝到 iOS 设备中。

  • App 在 Mac/iOS 真机上启动时,需要对配置的 bundle ID、entitlements 和 certificate 与 Provisioning Profile 进行匹配校验:

iOS 开发 Certificate和Code Signing--证书与签名--详解_第4张图片

  • iOS/Mac 真机上的 ios_development.cer 被 AppleWWDRCA.cer 中的 public key 解密校验合法后,获取每个开发证书中可信任的公钥对 App 的可靠性和完整性进行校验。

iOS/Mac 设备(系统)使用 App Provisioning Profile(Code Signing Identity)中的开发证书来判断App的合法性:

  • 若用证书公钥能成功解密出 App(executable bundle)的内容摘要(_CodeSignature),证明此 App 确乃认证开发者发布,即来源可信;
  • 再对 App(executable bundle)本身使用哈希算法计算摘要,若与上一步得到的摘要一致,则证明此 App 未被篡改过,即内容完整。

总结

  • 基于 Provisioning Profile 校验了 CodeSign 的一致性;
  • 基于 Certificate 校验 App 的可靠性和完整性;
  • 启动时,真机的 device ID(UUID)必须在 Provisioning - Profile 的 ProvisionedDevices 授权之列。
  • 无论是 Xcode 对 APP 进行签名打包还是真机运行 APP 进行校验,都使用了基于证书体系的非对称加密机制。

你可能感兴趣的:(开发证书和账号,iOS开发)