Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 了解证书和资源调配配置文件,让我知道它是否正确_Ios_Iphone_Xcode_Certificate_Provisioning Profile - Fatal编程技术网

Ios 了解证书和资源调配配置文件,让我知道它是否正确

Ios 了解证书和资源调配配置文件,让我知道它是否正确,ios,iphone,xcode,certificate,provisioning-profile,Ios,Iphone,Xcode,Certificate,Provisioning Profile,最近我在研究证书和配置文件在iOS上的工作原理,我不止一次地阅读了这篇博客,它太棒了,我想我已经从中了解了主要思想 现在我想确保我对这一点有正确的理解,所以我画了一幅图,描述了证书和配置文件中的一些重要部分,它将帮助我们理解配置文件是如何工作的。 我对开发证书和供应概况的理解。 我将省略关于我如何申请证书的细节,只是说我在苹果的网站上获得了我的开发证书和配置文件。在图中,我的证书是配置配置文件的一部分 现在我想在我的iPhone上调试我的项目,我在Xcode中选择相应的配置文件和证书,然后开始

最近我在研究证书和配置文件在iOS上的工作原理,我不止一次地阅读了这篇博客,它太棒了,我想我已经从中了解了主要思想

现在我想确保我对这一点有正确的理解,所以我画了一幅图,描述了证书和配置文件中的一些重要部分,它将帮助我们理解配置文件是如何工作的。

我对开发证书和供应概况的理解。

我将省略关于我如何申请证书的细节,只是说我在苹果的网站上获得了我的开发证书和配置文件。在图中,我的证书是配置配置文件的一部分

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

如何使用Apple检查它?

在我的图片中,配置文件包含设备标识符列表和应用程序的捆绑标识符,如果我的iPhone的标识符包含在设备标识符列表中,并且我的应用程序的捆绑标识符与配置文件中的一致,苹果将让它在设备上运行

但苹果必须确保配置文件是合法的,它应该来自苹果的开发网站,而不是一个伪造的,它如何做到这一点

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

然后让我们继续这个过程,在配置文件中,有一个数字签名,它是通过以下步骤生成的

  • 选择一个签名算法(可能是SHA1)并在配置文件中生成“数据部分”的哈希,我们将结果称为
    hashData1
    。(“此处的数据部分”应为除签名本身以外的所有配置文件数据)
  • 使用苹果的私钥加密
    hashData1
    ,我们将结果称为
    digitalSigData1
    digitalSigData1
    是数字签名,保存在配置配置文件中
  • 现在苹果如何使用数字签名进行检查?

  • 使用相同的签名算法来生成配置文件的散列,我们调用结果
    hashData2
  • 使用苹果的公钥加密
    digitalSigData1
    ,我们得到
    hashData3
    ,然后我们将
    hashData3
    hashData2
    进行比较,如果它们相同,则表示配置文件由苹果授权。(为了理解原因,我们必须讨论
  • 那么证书做什么呢?嗯,它用于确保应用程序包中的文件自生成以来未被修改:

    一个名为“\u CodeSignature”的目录。这是有趣的一个。里面有一个叫做“CodeResources”的文件;这是一个简单的plist文件,但它包含解决方案中所有其他文件的加密哈希。

    这些散列和数字签名是一样的,但它们是用我的私钥而不是苹果的私钥加密的。苹果将检查文件是否以我上面提到的方式被修改,但公钥是存储在证书中的我的公钥

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


    我从名为《计算机网络》的名著《自上而下的互联网认证方法》中学习了认证过程,该书在第7章中介绍了数字签名和认证。以上是我对证书和配置配置文件的理解,我认为其中可能有错误,多亏有人指出了这一点。

    xcode只在login.keychain中的公共证书中搜索CommonName。如果您有两个具有相同CommonName的证书,并且您要求xcode使用该CommonName,而其中一个您没有私钥,则xcode可能工作,也可能不工作,并报告一个错误,例如配置文件“Development_com.xxx”不包括签名证书“iPhone开发者:xxx(xxx)”