iOS签名机制

iOS签名机制,第1张

前置概念

单向散列函数

(非)对称加密

数字签名

数字证书

iOS签名流程

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

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

AppStore

真机调试

In-House,企业内部分发

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

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

单层签名机制

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

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

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

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

双层签名机制

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

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

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

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

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

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

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

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

注:

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

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

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

P.S.

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

我的博客

矩阵空间

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/997101.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存