notes

本文参考文章,只是把里面的内容重新做了表述。

本篇文章主要讲讲ios后台配置证书的每个流程的意义。

讲后台证书之前,必须要先搞懂数字签名,要搞懂数字签名,必须先了解非对称加密。

非对称加密

在非对称加密里面有一对密钥,一个是公开出去的密钥,称为公钥。一个是绝对不能公开,只有自己知道的密钥,称为私钥。

然后用公钥加密一个数据后得到的加密数据,只能用私钥去解密。用私钥加密的数据只能用公钥去解密。

知道了非对称加密的这个性质之后我们可以这样用,如果你想发布一个公告,证明这个内容确实是你发的,你可以用你的私钥加密这个数据,发布出去,然后拿到数据的人会通过公钥解密数据,解密成功那就说明这数据确实是你发的。

还可以用来加密,如果某人想发一段数据给你,就可以通过你给他的公钥加密,因为只有你有密钥,所以只有你能解开加密的数据。

数字签名

数字签名要保证的东西有两点:

  1. 保证这段数据确实是你发的。
  2. 保证数据没有被篡改过。

用非对称加密可以实现这个需求。

第一点在上面已经讲过了,怎么实现第二点呢?

我们可以先对原始数据做MD5,再对MD5生成的固定长度的数据做私钥加密。这样,就生成了一个数字签名,发布数据的时候把这个摘要一个发布出去。

拿到数据的人,也同时拿到了数字签名,他们通过公钥从数字签名中解出MD5,在对他们拿到的数据做MD5,判断这两个相不相等。如果相等,就说明数据没有被修改过。

iOS证书和签名

我们知道,apple的app只能在AppStore上下载的才能安装。这是怎么办到的呢?

原来苹果那边有一对公私钥,私钥存在苹果的服务器,公钥则是安装在每台iPhone内部,开发者提交app到AppStore后苹果都会把私钥把app数据进行签名。生成一份数字证书和app一起打包。这样就保证了app确实是从AppStore上下载的。

但是实际情况确更复杂,因为可以通过其他方式安装,比如开发中的app、AdHoc方式打包的app。这时候就更加复杂了。所以苹果专门搞了个后台给开发者配置证书。

1. 从证书颁发机构请求证书

从零开始配置证书的话是需要这个步骤的,这个步骤的作用是生成一对Mac电脑上的公私钥,和苹果那边的公私钥是不一样的。我们看到的CertificateSigningRequest.certSigningRequest文件就是公钥。私钥存在钥匙串里了。

2. 生成Certificates文件

第一步生成的Mac公钥要通过苹果后台提交给苹果,苹果会拿苹果服务器的私钥去签名Mac的公钥,生成Certificates文件下载到本地,点击安装的话就安装到钥匙串里了。

3. 添加App IDs

这个没什么好说的,最后打包到Provisioning Profiles里面要用到,安装时用来确保app的bundle id和app id是一样的。

4. 添加Devices

这步也没什么好说的,也是最后打包到Provisioning Profiles文件,安装时要校验iPhone设备。

5. 创建Provisioning Profiles

这步其实是把之前配置的信息打包起来,我们可以在后台选择打包进去的App ID,然后选择需要打包进去的certificates,再选择需要打包进去的devices。 最后Apple服务器会用私钥给Provisioning Profiles签名。

最后,我们会生成一个包含Provisioning Profiles文件、和通过Mac私钥加密app后的数据。

iPhone安装app的签名校验流程

  1. 首先取出app里面的Provisioning Profiles文件,用苹果的公钥去校验Provisioning Profiles文件的签名。
  2. 签名校验成功后,取出里面的 devices列表和bundle id,bundle id验证app,devices验证iPhone设备。同时,拿苹果的公钥再去校验Certificates文件的签名。
  3. 用苹果的公钥取出Certificates文件里面的Mac公钥。
  4. 用Mac公钥解出Mac私钥加密的app数据。
  5. 成功安装。

最后

想看详细的话最好还是看原文,里面说的更加详细。ios的证书配置实际上更加复杂,我只是把我理解的那部分简单的说了。