美文网首页
iOS签名机制04-总流程介绍

iOS签名机制04-总流程介绍

作者: 6ed2651eb5b0 | 来源:发表于2019-01-25 15:22 被阅读88次

    文章结构


    文章结构.png

    iOS签名机制的作用

    • 保证安装到用户手机上的APP都是经过Apple官方允许的
    • 不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤
      • 生成CertificateSigningRequest.certSigningRequest文件
      • 获得ios_development.cer\ios_distribution.cer证书文件
      • 注册device、添加AppID
      • 获得*.mobileprovision文件
    • 真机调试,现在的Xcode已经自动帮开发者做了以上操作

    iOS签名机制的流程

    • 当我们利用Xcode在真机调试时,编译,会发现以下签名步骤 signature1.png
    • iOS签名机制总体流程 signature2.png

      在每台mac电脑里,都有一对密钥,分别是Mac公钥和Mac私钥。在每一台iOS设备里,都有Apple公钥。而对应的Apple私钥是存放在苹果的服务器。接下来,对上述图片进行详细解释

      • 加密
        • 步骤1:把APP代码及资源文件先进行哈希,得到散列值,再利用Mac私钥进行加密(即利用Mac的私钥对代码签名),最终得到APP和签名
        • 步骤2:把Mac公钥利用Apple的私钥(Apple相当于CA机构)进行签名,得到证书(包括Mac公钥和签名),并包含devices,app id和entitlements(entitlements就是一些权限,比如推送,Game Center等)
        • 步骤3:再次进行签名,得到mobileprovision文件
      • 验证(当我们把ipa包安装到苹果手机上时,需要对ipa包进行验证)
        • 利用Apple公钥(每个iOS设备里都有)解密mobileprovision中的签名,得到证书,devices、app id和entitlements的散列值,看与带过来的这些信息是否匹配。如果匹配,再进一步看当前设备是否在devices列表中,app id和entitlement与最终代码里的id和权限是否一致
        • 利用Apple公钥解密证书中的签名,得到Mac公钥散列值,看与证书里的Mac公钥是否一致,从而得到Mac公钥
        • 利用Mac公钥解密签名,得到App的代码和资源文件的散列值,与其上面的APP匹配,看是否一致,从而达到验证代码的目的
    • 程序在启动的时候仍旧会进行验证,如下图! signature3.png
    • 结合.app的包内容说明 signature4.png
      • 步骤1对应的签名文件在_CodeSignature和Mach-o文件的签名文件里。
      • 步骤3对应的签名文件就是embeddedl.mobileprovision
    • 答疑
      • 上面的第6步,直接把Mac公钥存在每个iOS设备不就行了吗?直接Mac私钥加密,Mac公钥解密,不就简单很多,就不用像上面那样,为了得到Mac公钥,做那么多步骤?
        • 不行。如果把Mac公钥存在每个iOS设备上,则整个过程就不受苹果控制了。如果Mac公钥被人篡改了怎么办。Apple的私钥在苹果服务器,肯定不会被人篡改,是绝对安全的。
      • 既然每台iOS设备都有Apple公钥,那么在第1步直接用Apple私钥加密,在第6步再用Apple公钥解密,不就更方便了吗?
        • 不行。因为Apple私钥在苹果的后台。如果使用Apple私钥,相当于每次真机调试都要把代码上传到苹果服务器,然后Apple加密再传回来,这样太慢了。而Mac私钥是在本地的,直接编译运行跑在真机上即可。

    iOS签名机制与证书生成对应

    • 上图中的步骤1对应的操作是:Xcode中的run操作。点击run按钮,就会利用Mac私钥对代码进行签名。
    • 生成Mac设备的公私钥(CSR文件) signature5.png
    • 获得证书(cer证书),相当于最上面图的第2步 signature6.png
    • 生成mobileprovision文件,相当于最上面图的第3步 signature7.png
    总结
    • .certSigningRequest文件
      • Mac公钥
    • .cer文件
      • 利用Apple私钥(CA),对Mac公钥生成了数字签名
    • .mobileprovision
      • 利用Apple私钥,对[.cer证书+devices+AppID+entitlements] 进行数字签名

    App Store

    • 上述复杂的步骤是为了做真机调试或者上传app到AppStore
    • 用户如果从AppStore下载,则下载的安装包是经过Apple 私钥签过名的,所以直接拿每个iOS设备中的Apple公钥解密验证就行了
    • 如果APP是从AppStore下载安装的,会发现里面是没有mobileprovision文件的
    • 它的验证流程会简单很多,大概如下所示


      signature8.png

    相关文章

      网友评论

          本文标题:iOS签名机制04-总流程介绍

          本文链接:https://www.haomeiwen.com/subject/zgomjqtx.html