6

本主题继续让我困惑。我想我会写出我目前的理解,并希望找出我对错的事情。证书,配置文件,公钥/私钥被揭秘

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

为了运行一个应用程序,设备必须有一个供应配置文件,它基本上保留一个应用程序标识符,一组可识别的证书(应用程序必须由其中一个证书签名)和一个设备标识符集(指示哪些设备可以运行该应用程序)。

'认可的证书'具有对公钥的引用,而私钥实质上是由应用传递的。

因此,对于App Store,我们可以将普通设备看作是一个默认的配置文件,它已经有了苹果的“公钥”,苹果在分发之前执行它们自己的代码签名操作,键。

完美吗?关?离开?疯?

+0

寻找完美的,因为按我的知识。 –

回答

1

Ray Wenderlich对其进行了合理的解释here。为了改善而不是

你的描述中,“认可证书”有,公钥引用而 私钥由应用程序本质上传递。

我会说:

该应用程序的.ipa包括一个开发者证书。开发者 证书使用您的私钥 - 以及 官方Apple私钥进行签名。

因此,通过验证与苹果和您的公钥的开发者证书,iPhone可以验证:

  • 你是这个程序
  • 你已经为应用程序认证通过苹果的开发者开发
  • 此应用程序允许在iPhone上运行(只要在手机上提供了此开发人员证书的设置配置文件)。

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

+0

是否可以从ios应用程序证书获取公钥/私钥? –

+0

@ iTroyd23您当然不能从证书中获得私钥,因为这将是一个重大的安全漏洞。公钥,我不知道。即使它们在证书中,设备仍然应该从服务器请求它们,以避免其他安全漏洞。 – fishinear

+0

好的谢谢。苹果是否允许通过自己的应用程序访问配置文件? –

4

对于它的价值,这是我更新的认识:

的供应曲线是告诉你哪些应用程序(通过一个AppID)的文件,由开发者(通过证书)签署可以运行在哪些设备(UDID)。

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

当你在Xcode中创建你的代码,你的代码符号“与位于您的钥匙串中的私钥您的应用程序,从而“锁定”了。为了解锁/解密代码,目标设备必须有权访问您的公钥。设备从配置文件中包含的证书中获取公钥。

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

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

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

我们不需要从AppStore的应用程序单独省型材究其原因,我认为,是因为每个iPhone附带使用苹果的代码符号分布的应用程序的公共密钥。

+0

随时纠正! –

+0

我认为Ray的testflight教程解释了它更好,然后他的代码签名。 http://www.raywenderlich.com/48750/testflight-sdk-tutorial – huggie