最近我正在研究证书和配置文件如何在iOS上运行,我不止一次阅读博客"demystifying-ios-certificates-and-provisioning-files",这太棒了,我想我已经有了主要的想法。
现在我想确保对此有正确的理解,因此我绘制了一张图片,其中描述了证书和配置文件中的一些重要部分,它将帮助我们了解配置文件的工作原理。
我对开发证书和配置文件的理解。
我将省略有关我如何申请证书的详细信息,只是说我在Apple的网站上获得了我的开发证书和配置文件。在图片中,我的证书是配置文件的一部分。
现在我想在我的iPhone上调试我的项目,我在Xcode和相应的证书中选择配置文件,然后开始构建并运行应用程序,在此过程中,Xcode将配置文件复制到应用程序的包中,它将用它来检查我是否有权在此设备中调试应用程序。
Apple如何检查?
在我的图片中,配置文件包含设备标识符列表和应用程序的包标识符,如果我的iPhone的标识符包含在设备标识符列表中,并且我的应用程序的包标识符符合配置文件中的标识符,Apple将允许它在设备上运行。
但Apple必须确保配置文件是合法的,它应该来自Apple的开发网站,而不是假的,它怎么能实现呢?
首先,我们应该知道Apple有一对密钥(公钥和私钥),我们永远不会知道私钥。你知道RSA算法吗?用一句话解释一下:你有数据A,然后用私钥加密A,得到B.如果用你的公钥加密B,你得到A。
然后放开这个过程,在配置文件中,有一个数字签名,它是通过这些步骤生成的。
hashData1
。 (此处的“数据部分”应该是除签名本身之外的所有配置文件数据)hashData1
,我们调用结果digitalSigData1
。 digitalSigData1
是数字签名,它保存在配置文件中。现在Apple如何使用数字签名进行检查?
hashData2
。digitalSigData1
,我们得到hashData3
,然后我们将hashData3
与hashData2
进行比较,如果它们相同,则表示配置文件是Apple授权。 (要理解原因,我们必须谈谈asymmetric cryptographic algorithm)然后证书做什么?好吧,它用于确保自构建以来应用程序包中的文件未被修改。 Referenced in that blog "demystifying-ios-certificates-and-provisioning-files":
名为“_CodeSignature”的目录。这是有趣的。在其中有一个名为“CodeResources”的文件;它是一个简单的plist文件,但它包含解决方案中所有其他文件的加密哈希值。
这些哈希与数字签名相同,但它们是使用我的私钥而不是Apple的加密。 Apple将检查文件是否已按照我上面提到的相同方式进行修改,但公钥是我的证书中存储的公钥。
每次苹果运行我的应用程序时,它都会检查我的应用程序包中的文件是否已被修改,如果有人,应用程序将崩溃。
我从着名的书籍 计算机网络一种自上而下的网络 中学到了认证的过程,它在第7章讨论了数字签名和认证。以上是我对证书和配置文件的理解,我认为可能有些问题,感谢任何指出它的人。