ios签名机制的理解

2019-05-29 11:48

一、非对称算法和数字签名 区别之前的对称加密算法(加密解密用的是同一个秘钥),非对称加密算法需要两个秘钥,即公钥和私钥来进行加密和解密,它俩是成对出现的,如果用公钥加密的内容,只有对应的私钥才能解密,反之,用私钥加密的内容,只有对应的公钥才能解密。相对于对称算法,该算法安全性高,只要私钥不泄露,就能保证通信双方的安全,缺点是加密和解密花费时间长。例如HTTPS协议在SSL层就用到了非对称算法。 ios企业签名数字签名是一种对数字内容进行校验的方法,它首先对内容使用摘要算法(例如MD5算法)生成一段固定长度的文本,可以理解为原内容的摘要,然后利用私钥加密摘要,得到原内容的数字签名。接受方同时接收到与原内容和数字签名,首先用相同的摘要算法生成原内容的摘要(摘要1), 同时用公钥解密数字签名,得到摘要2,然后比较摘要1和摘要2,若相同,则验证原内容有效。具体流程如图1.1:

  1.1 数字签名

  二、申请数字证书

  数字证书是苹果公司数字签名后的数字化证书,是ios系统校验App的核心。以下是数字证书的申请过程:

  1、开发者首先在keyChain中生成一个证书申请文件(CertificationSigningRequest,简称CSR),该文件包含开发者的信息、公钥、公钥加密算法和摘要算法,在这个过程中,首先会产生一个开发者使用的私钥,保存在keyChain中。

  2、开发者上传CSR文件给Apple的MemberCenter(简称MC),苹果公司会根据该文件生成一个证书,包含两部分,即证书的内容和一段Apple的数字签名,如下图:

  1.2 证书内容

  数字签名是苹果利用自己的私钥加密证书内容摘要得到的,是为了验证证书的有效性。ios系统本身装有苹果公司的公钥,并通过图1.1的方式进行校验,如果摘要一致,证明数字证书的有效。苹果提供的证书有开发、调试证书,企业版发布证书,上架和AddHoc证书,类型不同,功能亦不相同。如果是团队开发,可以将证书导出生成.p12文件给其他人安装。

000146
  三、描述文件(mobileprovision)

  描述文件也是通过苹果的MC下载得到,里面包含了证书、AppId和设备UDID,除了这些还有授权信息,规定了App能够使用的服务有哪些。

  四、App打包签名、校验

  Xcode在打包生成ipa文件的过程中,利用当前证书的私钥进行代码、资源文件的数字签名,并且将其存放在ipa文件夹的_CodeSignature文件夹下,图1.3是ipa文件的结构图。当App安装到ios系统上时,系统首先通过描述文件找到数字证书,通过证书里的苹果数字签名,验证证书的有效性,如果证书有效,取出证书中的开发者公钥,解密App的数字签名,如果发现摘要一致,则验证通过,App成功安装在手机上,其中一个环节有问题,验证工作就失败,图1.4是校验过程