iOS 打包签名原理

198 阅读2分钟
  • 数字签名

    • 定义核心:它就是通过hash混淆算法和非对称加密的一种过程

    • 作用:防止数据篡改,一般夹带在要传输的数据中

    • 一般生成的流程为:Data---Hash算法---> Digest(摘要) ---私钥加密---> SignatureA(签名)

    • 验签流程为:

      • Data---Hash算法---> DigestA、SignatureA----公钥解密---->DigestB
      • DigestA 和DigestB 对比是否一样,称为签名验证流程

    注意:哈希算法是无法解密的

  • 数字证书

    • 实质为:公钥 + 公钥身份信息+ SignatureB(证书机构签发的)

    • 获取证书公钥前需对SignatureB进行验签操作

      • 拿SignatureB的公钥 解密SignaureB 得到摘要DigestB
      • 证书中的公钥 通过Hash算法算出DigestA
      • DigestB、DigestA 进行比较
    • 作用:保证了SignatureA 对应公钥的安全性

  • 证书信任链

    • CA证书 一般是在安装系统/软件时内置的

    • 证书一般分为三种

      • 根证书 Root Certificate
      • 中间证书 Intermediate Certificate
      • 叶子证书 Leaf Certificate 例如: Xcode 的开发证书 是有苹果的(中间证书)Apple Worldwide Developer Relations Certification Authortity 进行签发的
    • 打包的原理

      • 测试包安装流程

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

        • IPA 上传AppStore ,进行验签,重新对ipa 进行打包 移除 profile