了解证书和配置文件,请告诉我它是否正确

时间:2014-07-05 06:24:53

标签: ios iphone xcode certificate provisioning-profile

最近我正在研究证书和配置文件如何在iOS上运行,我不止一次阅读博客"demystifying-ios-certificates-and-provisioning-files",这太棒了,我想我已经有了主要的想法。

现在我想确保对此有正确的理解,因此我绘制了一张图片,其中描述了证书和配置文件中的一些重要部分,它将帮助我们了解配置文件的工作原理。 enter image description here

我对开发证书和配置文件的理解。

我将省略有关我如何申请证书的详细信息,只是说我在Apple的网站上获得了我的开发证书和配置文件。在图片中,我的证书是配置文件的一部分。

现在我想在我的iPhone上调试我的项目,我在Xcode和相应的证书中选择配置文件,然后开始构建并运行应用程序,在此过程中,Xcode将配置文件复制到应用程序的包中,它将用它来检查我是否有权在此设备中调试应用程序。

Apple如何检查?

在我的图片中,配置文件包含设备标识符列表和应用程序的包标识符,如果我的iPhone的标识符包含在设备标识符列表中,并且我的应用程序的包标识符符合配置文件中的标识符,Apple将允许它在设备上运行。

但Apple必须确保配置文件是合法的,它应该来自Apple的开发网站,而不是假的,它怎么能实现呢?

首先,我们应该知道Apple有一对密钥(公钥和私钥),我们永远不会知道私钥。你知道RSA算法吗?用一句话解释一下:你有数据A,然后用私钥加密A,得到B.如果用你的公钥加密B,你得到A。

然后放开这个过程,在配置文件中,有一个数字签名,它是通过这些步骤生成的。

  1. 选择签名算法(可能是SHA1)并在配置文件中生成“数据部分”的哈希值,我们将结果称为hashData1。 (此处的“数据部分”应该是除签名本身之外的所有配置文件数据)
  2. 使用Apple的私钥加密hashData1,我们调用结果digitalSigData1digitalSigData1是数字签名,它保存在配置文件中。
  3. 现在Apple如何使用数字签名进行检查?

    1. 使用相同的签名算法生成供应配置文件的哈希值,我们调用结果hashData2
    2. 使用Apple的公钥加密digitalSigData1,我们得到hashData3,然后我们将hashData3hashData2进行比较,如果它们相同,则表示配置文件是Apple授权。 (要理解原因,我们必须谈谈asymmetric cryptographic algorithm
    3. 然后证书做什么?好吧,它用于确保自构建以来应用程序包中的文件未被修改。 Referenced in that blog "demystifying-ios-certificates-and-provisioning-files"

      名为“_CodeSignature”的目录。这是有趣的。在其中有一个名为“CodeResources”的文件;它是一个简单的plist文件,但它包含解决方案中所有其他文件的加密哈希值。

      这些哈希与数字签名相同,但它们是使用我的私钥而不是Apple的加密。 Apple将检查文件是否已按照我上面提到的相同方式进行修改,但公钥是我的证书中存储的公钥。

      每次苹果运行我的应用程序时,它都会检查我的应用程序包中的文件是否已被修改,如果有人,应用程序将崩溃。

      我从着名的书籍 计算机网络一种自上而下的网络 中学到了认证的过程,它在第7章讨论了数字签名和认证。以上是我对证书和配置文件的理解,我认为可能有些问题,感谢任何指出它的人。

0 个答案:

没有答案