双向签名:
手机和苹果服务器还有开发人员的MAC电脑,他们一共维护着2对公私钥,利用这两对公私钥分别完成双向签名与验证,从而已到达苹果服务器对苹果手机里的appstore的控制权,辨别此app是否是经过授权的。
Mac电脑作为开发者的电脑,自己有一组公私钥M,然后苹果服务器自己有一个私钥A,然后手机端保存了一份苹果服务器的公钥A。公钥加密的文件只有对应的私钥才能解开,反之私钥加密的文件只有对应的公钥才能解开。
第一步:从苹果服务器获取开发者证书过程
1.Mac先发送自己的公钥M向服务器,请求app打包证书。
这里的公钥M CSR文件从哪来呢?他其实就是我们要生成证书之前从“钥匙串访问>证书助理”获取的那个文件:这个文件很熟悉吧,这就是MAC端的公钥M,当然口说无凭,我们可以打开看一下。
openssl asn1parse -i -in CertificateSigningRequest.certSigningRequest
结果如下:注意这个红圈的位置,他指定了采用sha256 RSA加密方式。 这就是你与苹果服务器之间的加密方式。
2.苹果下发证书
苹果拿到公钥M之后,会采用自己的私钥A对你的公钥M和CSR文件里面的hash值进行加密然后发送给你,这个就是你申请到的开发者证书。
为什么请求证书的MAC电脑可以直接打包编译,而给另一台MAC就必须要给他P12文件才能编译app? 其实就是因为你给别人P12文件里面包含了私钥M,而直接给证书是不包含私钥M的。就是图上的那个小钥匙。
第二步:Mac电脑拿到证书后生成App
生成应用的时候,Mac用自己的私钥M对我们的App进行了一次签名,然后将真正的可执行文件Macho+App的签名+苹果下发的证书共同打包生成了我们的app包,这个就是安装在手机的上的文件。
当然口说无凭,我们可以对app包打开看一下
这里三个划红线的地方分别就是我们的APP签名信息、Macho可以行文件、证书。
第三步:验证App是否有效
1.获取公钥M
我们的iphone利用自己的公钥A,解开苹果服务器私钥A签名的证书,获取到里面的公钥M。
2.利用公钥M验证签名
利用得到的公钥M继续解开Mac电脑私钥M的App签名,从而验证APP是否有效。
这就是苹果的APP的双向签名原理。