美文网首页
探究IPhone怎么验证App合法、开发怎么验证?

探究IPhone怎么验证App合法、开发怎么验证?

作者: struggle3g | 来源:发表于2018-05-10 00:58 被阅读101次

引言

每开发完一个App,正规的途径想让大家都可以下载这个App,我们需要上架在AppStore,会不会想到一个问题,AppStore是怎么知道我们的App是不是正规的,也就是说怎么知道从AppStore中下载的?
根据上面的问题,研究一番以后

Apple的好处是:

  1. 所有的App如果想让所有的用户下载,必须通过AppStore
  2. 所有的IPhone都是Apple一家制造
  3. 硬件、服务、设计一家所有

综合上述条件Apple公司可以实现验证App的目的,如果只验证App是否合法,Apple公司可以这么搞:

需要的准备

  • 自己生成私钥、公钥(私钥生成公钥)
  • 将私钥放到AppStore(AppleServer)
  • 所有的IPhone生产时都放入公钥

验证步骤

  1. 先上架开发完成App到AppStore
  2. AppStore用自己的私钥对App签名(也就是对App标示的hash值进行私钥加密)
  3. IPhone安装App时,用IPhone中的公钥对App解密,然后验证App标示
  4. 验证通过?安装:不安装


如果开发者也是这个过程那么,开发者的开发时间成本也就太大了。

开发者调试App验证

需要的准备

  • 用Mac电脑的钥匙串,生成私钥A、公钥A(Mac钥匙串中请求证书生成的CSR文件CertificateSigningRequest.certSigningRequest)
  • AppServer中本身存在自己的私钥B
  • 所有的IPhone都会放入Appstore中私钥生成的公钥B

步骤

  1. 用Mac电脑的CSR文件(也就是公钥)向AppleServer申请证书
  2. AppleServer生成一个证书Z,包含对1中的公钥进行加密(用ApplerServer的私钥B加密)的hash值,以及公钥A, 返回给本地电脑
  3. 我们安装的App不单单只有一个可执行文件,包含了:公钥A加密App的hash值的签名D、从AppleServer生成的证书,当然还有别的本文讲不到
    • 一个正常的可安装的App包含的内容:
      • 可执行文件
      • 公钥A对App的hash值的签名D(加密)
      • AppleServer生成的证书Z
  4. 手机取出App的证书Z,用公钥B对这个证书Z进行解密拿到公钥A,以及App的hash值 然后验证这个证书是否合法
  5. 用公钥A解密签名D拿到App的hash值,进行验证是否合法
  6. 通过4,5双重验证推送证明该App合法,可以正常调试、安装了

问题?

当然你可以在上述基础上面验证App的合法性,但是有问题,我只要申请一个证书,我就可以在任何的IPhone上面安装这个App,这样没有达到完成控制的目的,Apple肯定不乐意,理所应当的又弄了一个权限文件,也就是大家熟悉的描述文件provisionprofile文件

描述文件也是通过签名认证的所以也无法修改,so只能去AppleServer申请。

  • 当用户申请证书以后,打包App进行安装的时候Xcode会帮助我们生成一个描述文件,这个描述文件就是我们App的第二阶段的限制包含:
    • 限制你的设备数量
    • 只能签名一个App
    • App的权限:推送、定位。。。等等
      通过以上provisionprofile来控制App的安装

步骤就会变成酱紫

  1. 用Mac电脑的CSR文件(也就是公钥)向AppleServer申请证书
  2. AppleServer生成一个证书Z,包含对1中的公钥进行加密(用ApplerServer的私钥B加密)的hash值,以及公钥A, 返回给本地电脑
  3. 我们安装的App不单单只有一个可执行文件,包含了:公钥A加密App的hash值的签名D、从AppleServer生成的证书,当然还有别的本文讲不到
    • 一个正常的可安装的App包含的内容:
      • 可执行文件
      • 公钥A对App的hash值的签名D(加密)
      • AppleServer生成的证书Z
  4. Xcode拿到证书Z以及Mac本地的私钥对App进行签名
  5. 将证书Z、描述文件、签名D、MachO文件一起打包到手机
  6. 手机取出App的证书Z,用公钥B对这个证书Z进行解密拿到公钥A,以及App的hash值 然后验证这个证书是否合法
  7. 用公钥A解密签名D拿到App的hash值,进行验证是否合法
  8. 通过4,5双重验证推送证明该App合法,可以正常调试、安装了


验证结果

  • 查看是否打包在App包里面有描述文件
    1. 建一个项目
    2. 设置好证书
    3. 编译代码
    4. 打开App包
  • 查看证书,签名信息

    1.包里面

2.MachO可执行包里面

相关文章

网友评论

      本文标题:探究IPhone怎么验证App合法、开发怎么验证?

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