本文参考文章,只是把里面的内容重新做了表述。
本篇文章主要讲讲ios后台配置证书的每个流程的意义。
讲后台证书之前,必须要先搞懂数字签名,要搞懂数字签名,必须先了解非对称加密。
在非对称加密里面有一对密钥,一个是公开出去的密钥,称为公钥。一个是绝对不能公开,只有自己知道的密钥,称为私钥。
然后用公钥加密一个数据后得到的加密数据,只能用私钥去解密。用私钥加密的数据只能用公钥去解密。
知道了非对称加密的这个性质之后我们可以这样用,如果你想发布一个公告,证明这个内容确实是你发的,你可以用你的私钥加密这个数据,发布出去,然后拿到数据的人会通过公钥解密数据,解密成功那就说明这数据确实是你发的。
还可以用来加密,如果某人想发一段数据给你,就可以通过你给他的公钥加密,因为只有你有密钥,所以只有你能解开加密的数据。
数字签名要保证的东西有两点:
- 保证这段数据确实是你发的。
- 保证数据没有被篡改过。
用非对称加密可以实现这个需求。
第一点在上面已经讲过了,怎么实现第二点呢?
我们可以先对原始数据做MD5,再对MD5生成的固定长度的数据做私钥加密。这样,就生成了一个数字签名,发布数据的时候把这个摘要一个发布出去。
拿到数据的人,也同时拿到了数字签名,他们通过公钥从数字签名中解出MD5,在对他们拿到的数据做MD5,判断这两个相不相等。如果相等,就说明数据没有被修改过。
我们知道,apple的app只能在AppStore上下载的才能安装。这是怎么办到的呢?
原来苹果那边有一对公私钥,私钥存在苹果的服务器,公钥则是安装在每台iPhone内部,开发者提交app到AppStore后苹果都会把私钥把app数据进行签名。生成一份数字证书和app一起打包。这样就保证了app确实是从AppStore上下载的。
但是实际情况确更复杂,因为可以通过其他方式安装,比如开发中的app、AdHoc方式打包的app。这时候就更加复杂了。所以苹果专门搞了个后台给开发者配置证书。
从零开始配置证书的话是需要这个步骤的,这个步骤的作用是生成一对Mac电脑上的公私钥,和苹果那边的公私钥是不一样的。我们看到的CertificateSigningRequest.certSigningRequest
文件就是公钥。私钥存在钥匙串里了。
第一步生成的Mac公钥要通过苹果后台提交给苹果,苹果会拿苹果服务器的私钥去签名Mac的公钥,生成Certificates文件下载到本地,点击安装的话就安装到钥匙串里了。
这个没什么好说的,最后打包到Provisioning Profiles里面要用到,安装时用来确保app的bundle id和app id是一样的。
这步也没什么好说的,也是最后打包到Provisioning Profiles文件,安装时要校验iPhone设备。
这步其实是把之前配置的信息打包起来,我们可以在后台选择打包进去的App ID,然后选择需要打包进去的certificates,再选择需要打包进去的devices。 最后Apple服务器会用私钥给Provisioning Profiles签名。
最后,我们会生成一个包含Provisioning Profiles文件、和通过Mac私钥加密app后的数据。
- 首先取出app里面的Provisioning Profiles文件,用苹果的公钥去校验Provisioning Profiles文件的签名。
- 签名校验成功后,取出里面的 devices列表和bundle id,bundle id验证app,devices验证iPhone设备。同时,拿苹果的公钥再去校验Certificates文件的签名。
- 用苹果的公钥取出Certificates文件里面的Mac公钥。
- 用Mac公钥解出Mac私钥加密的app数据。
- 成功安装。
想看详细的话最好还是看原文,里面说的更加详细。ios的证书配置实际上更加复杂,我只是把我理解的那部分简单的说了。