iOS 应用签名

在iOS系统出来之前,我们的主流操作系统(Mac/Windows)上任何地方下载的软件都能运行,系统安全存在隐患,那么苹果希望解决这样的问题,要保证每一个安装到 iOS 上的 APP 都是经过苹果官方允许的,所以就有了iOS的应用签名。

1、什么是应用签名?

顾名思义,应用签名就是对应用的签名,对应用中可执行文件或脚本数据(其实就是代码)进行一次Hash,然后再进行一次RSA加密后获得的结果。这就是苹果用来确认软件在签名后未被修改或损坏的措施。

2、苹果是如果验证应用签名的?

苹果给了用户一个基本的验证方式,在iOS系统中内置一个公钥,私钥由苹果后台服务器保存,当开发者将开发的App上传到AppStore的时候,苹果用暴力且直接的方式用服务器的私钥进行签名(这就是平常我们看到我们上传到AppStoreApp显示处理中的原因),用户从手机上的AppStore下载应用后,iOS系统使用公钥验证这个签名是否正确,如果签名正确,说明这个App是由苹果后台认证且没有修改过的,这样就保证了每一个App都是经过苹果官方允许的。

3、上述签名方式有什么问题?

如果我们iOS设备安装App只从App Store这一个入口这件事就简单解决了,但是开发者肯定需要进行真机调试,还有企业内部分发的渠道,那这些就不能解决了。

4、苹果的双层签名方式

对于开发者来说 安装包不需要上传到App Store,可以直接安装到手机上,但是苹果又为了保证系统的安全性,必须对安装的APP有绝对的控制权,不能被滥用导致非开发APP也能被安装。

为了实现这些需求,iOS签名的复杂度也就开始增加了,苹果这里给出的方案是双层签名。

我们需要将我们开发阶段的App安装到手机上时,苹果就给开发这提供了申请证书的方式。

双层签名.png

我们的Mac电脑上生成一对公钥M私钥M,然后将公钥M打包成CSR文件上传到苹果服务器,苹果服务器使用保存在服务器上的私钥A公钥M进行非对称加密后就会得到一个开发者证书,证书中包含的是被加密的公钥M,这个证书也就是我们常说的p12文件。

在开发阶段我们想把App安装到手机上,在Build的时候,Mac就会使用私钥MApp进行一次签名,然后把我们从苹果服务器请求回来的证书一起打包到我们的App中,这时候iOS操作系统就会使用公钥A对打包到App的证书进行解密,如果验证成功了说明是苹果允许安装的。

然后使用公钥A对证书中加密的公钥M进行解密,验证当前App的签名,这样就完成苹果的双层验证,既能保证了是苹果允许安装的,还能验证是不是我们开发的App

5、描述文件的产生

苹果为了保证安装的设备是苹果允许的的设备和限制安装的设备数,在向苹果申请证书的时候,苹果会返回一个包含证书的描述文件。

在我们开发的时候Xcode会向苹果申请描述文件。

Xcode申请描述文件

可以使用Finder 的前往打开,文件存放位置 ~/资源库/MobileDevice/Provisioning Profiles/

描述文件的位置

描述文件中会有证书的信息,授权设备的信息,申请的时间,过期的时间等等。

我们看一下这个证书,终端进入当前证书的文件夹,输入指令security cms -Di embedded.mobileprovision ,我们发现描述文件其实就是一个plist

以上是就是iOS应用签名和应用签名的验证。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 数字签名 数字签名(又称公钥数字签名、电子签章等)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术...
    我叫Vincent阅读 4,190评论 1 10
  • 一、代码签名 代码签名是对可执行文件或脚本进行数字签名,用来确认软件在签名后未被修改或损坏的措施。和 数字签名原理...
    Code_人生阅读 551评论 0 2
  • 本文将讲解苹果的应用签名原理,旨在理解了应用签名后可以对非自己的应用进行重签名。 下面将从三个方面去讲解应用的签名...
    裸奔的蜗牛z阅读 281评论 0 0
  • 代码签名是对可执行文件或脚本进行数字签名.用来确认软件在签名后未被修改或损坏的措施。和数字签名原理一样,只不过签名...
    苍天兄弟阅读 464评论 0 3
  • 去梦里做一只黄莺 在夜深人静的时候 站在你的窗前 用歌声催眠 把你带入我的梦境 去梦里做一轮明月 在你孤独的时候 ...
    二维蚂蚁阅读 226评论 0 5

友情链接更多精彩内容