当前位置:   article > 正文

iOS签名机制_ios 使用不同的bundlename和签名管理

ios 使用不同的bundlename和签名管理

前置概念

iOS签名流程

iOS签名机制的作用是为了保证安装的App的合法性,即验证安装的App是否是经过Apple允许的正规程序。

App在iOS设备上共有四种发布方式:

  • AppStore

  • 真机调试

  • In-House,企业内部分发

  • AD-Hoc,限制数量的In-House

而根据发布方式的不同,签名流程也有所区别。其中AppStore使用的是最简单的单层签名机制,而后三种使用的都是较为复杂的双层签名机制。这也很好理解,AppStore发布的软件内容本身就会经过Apple的审核,而且一般不会频繁下载,所以使用单层签名机制就已经足够。而如果使用后三种发布方式,App的内容不会被审核,增加了用户使用的风险,而且真机调试需要频繁加载,不可能每次都向Apple服务器请求验证,因此使用更安全复杂的双层签名机制。

单层签名机制

单层签名机制用于在AppStore分发App的情况,是较为简单的签名机制。

  1. Apple本身有一对密钥对,Apple后台存有私钥记作私钥A,每一台iOS设备中都内置了公钥记作公钥A

  2. Apple后台用私钥A对上传的App进行签名

  3. 下载完成后iOS设备用公钥A对App进行验签

iOS单层签名机制

双层签名机制

双层签名的目的是在不使用AppStore分发软件的情况下,比如真机调试、企业分发时,保证App的来源的合法性。

  1. 在开发设备上向证书颁发机构申请得到一对密钥对和CSR文件(Certificate Signing Request,证书请求文件),密钥对记作公钥M和私钥M,存储在本地KeyChain中。CSR文件里包含了公钥M的信息。

  2. 将CSR文件上传给Apple后台,Apple用私钥A对公钥M进行签名(刚才说过Apple后台存着私钥A,iOS设备上存着公钥A),得到证书(.cer文件)。

  3. 在Apple网站上配置完AppID、Entitlements(权限列表)、DeviceIDs(设备列表)后,再加上刚才生成的证书,一起使用私钥A再次签名,得到Provisioning Profile(描述文件),下载到本地安装。

  4. 用本地的私钥M对App进行签名,并和刚才生成的Provisioning Profile描述文件(在这里改名叫embedded.mobileprovision)一起打包成ipa

  5. 在安装App时,用iOS设备内的公钥A验证embedded.mobileprovision描述文件,验证是否由苹果授权,并取出里面的AppID、Entitlements、DeviceIDs等一一验证。

  6. 再用公钥A验证描述文件中的证书,验证公钥M是否可以信任,其实就是验证开发者是否可以信任。

  7. 如果证书验证通过,则取出公钥M用来验证App签名,通过就可以使用App。

iOS双层签名机制

注:
  • 开发者的密钥对:记作公钥M和私钥M,都在开发机上。Apple的密钥对:记作公钥A和私钥A,公钥A在每一台iOS设备上,私钥A在Apple后台

  • 对数据进行签名的产物是数据本身和数据的摘要的组合

  • 从上述流程中可以看出,要实现真机调试,除了App程序外,需要的是开发者的私钥证书描述文件。使用其他电脑进行真机调试时我们所需的是p12文件描述文件。由创建者导出的p12文件中包含了证书私钥,协作开发者可以通过导入创建者的p12文件并从Apple后台下载描述文件(当然也可以由他人传递)来进行真机调试。

P.S.

以上就是iOS签名的机制,至于开发者每一步需要进行的操作,如果上述流程没有写到的话,其他地方也很容易查到,这里就不详细写了。有时间我会把一些前置的概念,比如加密、证书等再详细写几篇。

我的博客

矩阵空间

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/47617
推荐阅读
相关标签
  

闽ICP备14008679号