苹果APP验证原理(1):双向签名

双向签名:

手机和苹果服务器还有开发人员的MAC电脑,他们一共维护着2对公私钥,利用这两对公私钥分别完成双向签名与验证,从而已到达苹果服务器对苹果手机里的appstore的控制权,辨别此app是否是经过授权的。


图1.png

Mac电脑作为开发者的电脑,自己有一组公私钥M,然后苹果服务器自己有一个私钥A,然后手机端保存了一份苹果服务器的公钥A。公钥加密的文件只有对应的私钥才能解开,反之私钥加密的文件只有对应的公钥才能解开。

第一步:从苹果服务器获取开发者证书过程

请求证书.png
1.Mac先发送自己的公钥M向服务器,请求app打包证书。

这里的公钥M CSR文件从哪来呢?他其实就是我们要生成证书之前从“钥匙串访问>证书助理”获取的那个文件:
公钥M.png

这个文件很熟悉吧,这就是MAC端的公钥M,当然口说无凭,我们可以打开看一下。

openssl asn1parse -i -in CertificateSigningRequest.certSigningRequest

结果如下:
csr文件.png

注意这个红圈的位置,他指定了采用sha256 RSA加密方式。 这就是你与苹果服务器之间的加密方式。

2.苹果下发证书

苹果拿到公钥M之后,会采用自己的私钥A对你的公钥M和CSR文件里面的hash值进行加密然后发送给你,这个就是你申请到的开发者证书。

这里有个小tip:
证书.png

为什么请求证书的MAC电脑可以直接打包编译,而给另一台MAC就必须要给他P12文件才能编译app? 其实就是因为你给别人P12文件里面包含了私钥M,而直接给证书是不包含私钥M的。就是图上的那个小钥匙。

第二步:Mac电脑拿到证书后生成App

生成app.png

生成应用的时候,Mac用自己的私钥M对我们的App进行了一次签名,然后将真正的可执行文件Macho+App的签名+苹果下发的证书共同打包生成了我们的app包,这个就是安装在手机的上的文件。
当然口说无凭,我们可以对app包打开看一下


APP包文件.png

这里三个划红线的地方分别就是我们的APP签名信息、Macho可以行文件、证书。

第三步:验证App是否有效

验证.png
1.获取公钥M

我们的iphone利用自己的公钥A,解开苹果服务器私钥A签名的证书,获取到里面的公钥M。

2.利用公钥M验证签名

利用得到的公钥M继续解开Mac电脑私钥M的App签名,从而验证APP是否有效。
这就是苹果的APP的双向签名原理。

第二篇:描述文件与签名信息

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。