7

这个话题继续让我感到困惑。我想我会写出我目前的理解,并希望找出我对的事情/我错的事情。

创建开发证书时,有公钥和私钥的概念。通过供应门户提供的证书持有一个公钥,而您的私钥存储在您的钥匙串中。为了对您的应用程序进行代码签名,您必须同时拥有两者。

为了运行应用程序,设备必须具有配置文件,该配置文件本质上包含应用程序标识符、一组公认的证书(应用程序必须已由这些证书之一签名)和一组设备标识符(指示允许哪些设备运行该应用程序)。

“公认的证书”引用了公钥,而私钥本质上是由应用程序传递的。

因此,对于 App Store,我们可以将普通设备视为带有默认的 prov 配置文件,该配置文件已经具有苹果的“公钥”,并且苹果在分发之前执行自己的代码签名操作,从而添加他们的私钥。

完美的?关闭?走开?疯狂的?

4

2 回答 2

5

对于它的价值,这是我的最新理解:

配置文件是一个文件,它告诉您哪些应用程序(通过 AppID)由哪个开发人员(通过证书)签名,可以在哪些设备(UDID)上运行。

对于证书,有一个公钥和私钥的概念。公钥和私钥在数学上是联系在一起的,这样一个人可以加密纯文本,一个人可以解密密文。证书允许苹果确保两件事:1,只有注册的开发人员可以分发他们的代码,2,正在分发的代码在发送到您的设备的过程中不会被更改。

当您在 Xcode 中构建代码时,您使用位于钥匙串中的私钥对您的应用程序进行“代码签名”,从而“锁定”它。为了解锁/解密代码,目标设备必须有权访问您的公钥。设备从配置文件中包含的证书中获取公钥。

为了验证代码在从开发人员到设备的过程中保持不变,您的证书包含一个算法,可以将您的代码/数据转换为所谓的“摘要”。在开发人员方面,数据/代码通过算法运行,生成单独的摘要,然后用私钥锁定。

当设备接收到应用包时,设备可以通过执行以下操作来确保代码没有被更改:使用私钥解锁摘要,通过算法运行未加密的数据(请记住,设备可以访问证书通过其 prov 配置文件),并确保结果是与开发人员发送的摘要相同的摘要。

除此之外,prov profile 只需要检查手机的 UDID,并确保 profile 中的 AppID 与应用程序中的标识符匹配。

我认为,我们不需要为应用商店中的应用提供单独的 prov 配置文件的原因是因为每部 iPhone 都附带了苹果用来对分发应用进行代码签名的公钥。

于 2012-12-05T19:24:16.173 回答
2

Ray Wenderlich 在这里很好地解释了它。为了改善您的描述,而不是

“公认的证书”引用了公钥,而私钥本质上是由应用程序传递的。

我会说:

app .ipa 包含一个开发者证书。开发者证书使用您的私钥以及 Apple 官方私钥进行签名。

因此,通过使用 Apple 和您的公钥验证开发者证书,iPhone 可以验证:

  • 你是这个应用程序的开发者
  • 您已获得 Apple 应用程序开发认证
  • 此应用程序允许在 iPhone 上运行(只要手机上存在引用此开发人员证书的配置文件)。

您的私钥不存储在任何证书或配置文件中,它仅用于签名。不确定是否存储了公钥。为了完全安全,手机在验证时应从 Apple 获取公钥。

于 2012-11-30T16:42:35.507 回答