证书,供应配置文件,公钥/私钥揭秘

时间:2012-11-30 08:55:55

标签: objective-c ios xcode provisioning-profile code-signing-certificate

这个话题让我感到困惑。我以为我会写出我目前的理解,并希望找出我正确的事情/我错的事情。

创建开发证书时,有一个公钥和私钥的概念。通过配置门户可用的证书保留在公钥上,而您的私钥存储在您的钥匙串中。为了对您的应用进行代码签名,您必须同时拥有这两个应用。

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

“已识别的证书”引用了公钥,而私钥基本上是由应用程序传递的。

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

完美?关?离开?疯狂?

2 个答案:

答案 0 :(得分:5)

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

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

使用证书,有一个公钥和私钥的概念。公钥和私钥在数学上是链接的,因此可以加密纯文本,并且可以解密密文。证书允许apple确保两件事:1,只有注册的开发人员才能分发他们的代码; 2,正在分发的代码在到设备的途中不会被改变。

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

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

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

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

我认为,我们不需要为appstore中的应用程序提供单独的prov配置文件,因为每个iPhone都附带了apple用来编码签名分发应用程序的公钥。

答案 1 :(得分:1)

Ray Wenderlich解释得相当好here。改进您的描述,而不是

  

“已识别的证书”引用了公钥,而   私钥实际上是由应用程序传递的。

我会说:

  

应用.ipa包含开发者证书。开发者   证书是用您的私钥签署的 - 以及   官方Apple私钥。

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

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

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