iOS 开发 Certificate和Code Signing--证书与签名--详解
2016-10-31 18:09
435 查看
iOS 开发 Certificate和Code Signing–证书与签名–详解
1.Certificate-证书
iOS 开发 证书–根证书/申请证书/开发(发布)证书–详解2.Code Signing-签名
iOS 开发 code sign 代码签名深入剖析每个证书(其实是公钥)对应 Key Pair 中的私钥会被用来对内容(executable code,resources such as images and nib files aren’t signed)进行数字签名(CodeSign)——使用哈希算法生成内容摘要(digest)。
Xcode 使用指定证书配套的私钥进行签名时需要授权,选择【始终允许】后,以后使用该私钥进行签名便不会再弹出授权确认窗口。
3.Code Signing Identity-官方图解
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/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开发中的证书和代码签名(code signing)
- IOS开发中的证书和代码签名(code signing)
- iOS 证书与签名 解惑详解[转]
- XE6 & IOS开发之免证书真机调试(1):颁发属于自己的App签名证书(有图有真相)
- iOS Provisioning Profile(Certificate)与Code Signing详解(转)
- [转载]iOS Provisioning Profile(Certificate)与Code Signing详解
- IOS开发证书和代码签名
- iOS Provisioning Profile(Certificate)与Code Signing详解
- iOS开发证书要点详解,ios证书详解
- iOS 开发环境,证书和授权文件等详解
- IOS 开发环境,证书和授权文件等详解
- XE6 & IOS开发之免证书真机调试(1):颁发属于自己的App签名证书(有图有真相)
- iOS Provisioning Profile(Certificate)与Code Signing详解
- iOS开发证书要点详解,ios证书详解
- 【转】IOS 开发环境,证书和授权文件等详解
- iOS 证书与签名 解惑详解
- iOS Provisioning Profile(Certificate)与Code Signing详解
- iOS 证书与签名 解惑详解
- iOS Provisioning Profile(Certificate)与Code Signing详解
- iOS开发52-iOS 开发者账号、Certificate(证书)、App ID、Device、Provisioning Profile(证书、App ID、设备)的学习和使用