姐妹篇

简单了解对称和非对称加密

单向散列函数

数字签名

CA数字证书

iOS签名机制

  • iOS签名机制的作用

    • 保证安装到用户手机上的APP都是经过Apple官方允许的
  • 不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤

    • 生成CertificateSigningRequest.certSigningRequest文件
    • 获得ios_development.cer\ios_distribution.cer证书文件
    • 注册device、添加App ID
    • 获得*.mobileprovision文件
  • 对于真机调试,现在的Xcode已经自动帮开发者做了以上操作

  • 思考

    • 每一步的作用是什么?
    • .certSigningRequest、.cer、.mobileprovision文件究竟里面包含了什么?有何用处?

签名流程

  • 首先我们需要三个角色,Mac设备苹果后台iOS设备

    • Mac设备要生成一对公钥私钥
    • 苹果后台也有一对公钥私钥,私钥保存在苹果后台
    • 每一台iOS设备上,都有苹果的公钥
  • Mac对App打包时,要对App包进行签名(用Mac的私钥签名)。 签名后生成:

    • App包
    • 对App包的散列值签名的签名文件
  • Mac的公钥上传至苹果后台后,苹果会用自己的私钥对Mac的公钥进行签名, 签名后生成:

    • 苹果私钥Mac公钥签名的签名文件 (.cer 文件)
  • 接着苹果后台,会使用其私钥对包括 .cer文件,devices,Appid, Entitlements在内文件再次数字签名,并生成

    • .mobileprovision 文件
      • 文件包含 Mac公钥的数字签名,devices,Appid, Entitlements**
      • 以及对以上文件,苹果私钥签名后的数字签名
  • 在App 安装进iOS设备时, iOS设备首先会用苹果的公钥对.mobileprovision 文件进行解密

    • 如果签名验证通过, 则能接触 Mac公钥签名devices, AppId, Entitlements等信息
    • 如果验证失败, 则会安装失败
  • 接下来,还是需要 苹果的公钥Mac的公钥签名信息进行解密

    • 如果签名验证通过, 则能拿到可以确保没有问题的Mac的公钥信息
    • 如果验证失败, 则会安装失败
  • 接下来一步,就是利用 Mac的公钥信息验证安装包中的签名(因为Mac打包App时,是使用的自己的私钥进行加密的)

    • 如果签名验证通过, 则可以解出App 的 mach-o文件,资源文件

截屏2020-06-05下午11.06.50

  • Mac生成证书操作

    • 先回忆一下,Alice 和 Bob通信过程中,发送公钥经过CA机构签名的过程

      • 证书生成过程,是Bob在向Alice,发送公钥时,为了避免 中间人攻击, 而向CA认证机构注册公钥。
      • CA认证机构自己的私钥施加数字签名,并生成证书
      • Alice,在CA认证机构处,得到带有Bob方公钥的数字签名
      • Alice,使用CA机构的公钥,验证数字签名是否有效,确保Bob公钥的合法性
      • Alice,使用接收方的公钥加密,发送消息
    • 在Mac 生成证书过程中

      • 苹果就充当CA认证机构
      • 第一步,mac生成 .certSignRequest 文件,其实就是 Mac 的公钥
      • 第二步,上传.certSignRequest 文件, 就是苹果后台用自己的私钥,对Mac的公钥进行数字签名
      • 第三步,生成**.cer文件**, 也就是**苹果后台用自己的私钥**,对**Mac的公钥签名**后的**证书**文件

    截屏2020-06-05下午10.44.19

    • .mobileprovision文件

      • 生成.mobileprovision文件的过程,就是选择完 AppID, .cer文件 , devices之后,苹果后台又一次对上述文件用自己的私钥,进行签名的过程,签名之后生成.mobileprovision文件

      截屏2020-06-05下午11.11.16

      截屏2020-06-05下午11.11.20

总结:

  • .certSigningRequest文件
    • Mac的公钥
  • .cer文件
  • 利用苹果的私钥(CA), 对Mac的公钥签名,生成的数字签名证书
  • .mobileprovision文件
    • 利用苹果私钥, 对【.cer + devices + AppID + entitlements】进行数字签名,生成的文件

AppStore下载的App

  • 如果APP是从AppStore下载安装的,你会发现里面是没有mobileprovision文件的

  • 它的验证流程会简单很多,大概如下所示

    截屏2020-06-05下午11.21.03