了解 iOS 中的 Provisioning 配置文件和证书

Posted

技术标签:

【中文标题】了解 iOS 中的 Provisioning 配置文件和证书【英文标题】:Understanding Provisioning profiles and certificates in iOS 【发布时间】:2013-03-06 03:08:43 【问题描述】:

我对配置文件、证书的理解是否正确(在开发期间)?

    在设备上安装时,应用程序是否使用来自 xcode 的开发人员证书进行签名?证书应该存在于配置文件中(存储在 iPad/iPhone 中),安装设备的 deviceid 也应该存在于配置文件中。 因此,当您在设备未连接到开发者 mac 时单击应用程序时,应用程序的签名证书应与配置文件中的一个匹配(存在于设备上),并且设备 ID 也应与配置文件中的一个匹配profile,然后应用才会运行。 当设备连接到运行 xcode 的 mac 并且您想要调试时,存储在钥匙串中的公钥+私钥开始发挥作用,xcode 尝试使用证书解锁存储在钥匙串中的公钥+私钥和因此识别出mac,并执行上面的项目符号,如果也是如此,那么您可以成功调试

【问题讨论】:

一个brilliant tutorial在你的空闲时间阅读.. 所以你是在业余时间,对吧? 发誓一个很棒的教程涵盖了所有的东西 傻瓜代码签名和配置 + 一个很棒的白色图表。 medium.com/p/d5b247760bef 【参考方案1】:

首先,在 Xcode 中选择配置文件会产生误导;在 Xcode 中构建实际上与配置文件无关!实际发生的是 Xcode 只是将配置文件中的公钥证书与您的钥匙串中的一个匹配,然后使用私钥对可执行文件进行签名。那是沼泽标准的 Mach-O 可执行签名。这也是他们在 Xcode 5 中将其更改为更清晰的原因。这也是配置文件上的错误(未找到签名身份)的来源 - 这意味着 Xcode 找不到与配置文件中的任何公钥对应的私钥。

您的个人开发者证书是标准的 PKI 东西;您的 Mac 以 Apple 不知道您的私钥的方式向 Apple 发送证书请求(类似于 SSL 证书请求)。 Apple 生成证书,钥匙串将其与原始请求相匹配,为您提供证书的公钥和私钥。为单个开发人员创建配置文件时,会列出该开发人员的公钥。创建团队配置文件时,将包含所有选定团队成员的公钥。这允许团队成员签署可执行文件,但签名者的姓名将是团队名称而不是个人。

ios 启动任何可执行文件时,它首先会检查签名。如果签名由 Apple App Store 签名,则它会运行。

如果没有,它会检查已安装的配置文件。配置文件包括: 1. 开发者证书列表 2.一个应用程序ID 3. 授予的权利(例如 iCloud、Game Center 等) 4. 设备 UDID 列表 5. 整个事情由苹果包好并签字。

检查配置文件以确保它由 Apple 的密钥(使用 Apple 的公钥)签名。然后验证当前设备的 UDID 是否在列表中。它还验证应用程序 ID 是否匹配(尽管允许使用通配符)。然后它根据有效的开发人员证书公钥列表检查 Mach-O 签名。如果其中任何一个匹配,则可执行文件运行并被授予列出的权利。如果没有,则被阻止。

我强烈建议在文本编辑器中打开一个 .mobileprovision 文件;你会学到很多东西!

【讨论】:

.mobileprovision 文件在哪里?我在我的 Xcode 项目目录中找不到它。 您可以从会员中心的配置文件下下载它们。 在您的系统中,当您安装配置文件时,它将出现在 ~/Library/MobileDevice/Provisioning Profiles 中 出于某种原因,我很难理解这一切。我希望某个地方有一个漂亮的信息图表,可以很好地展示这一切,这样我就可以在脑海中记住那张图片了...... 我想知道为什么 Apple 在配置文件标准中添加了到期日期?如果配置文件不会过期,不是更简单吗?

以上是关于了解 iOS 中的 Provisioning 配置文件和证书的主要内容,如果未能解决你的问题,请参考以下文章

iOS所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程

消息配置文件“iOS Team Provisioning Profile: *”将在 15 天后过期

iOS配置证书:Provisioning profile "xx_Distribution" doesn't include signing certificate &qu

用于业务分发的 IOS Provisioning Profile

PushSharp 的 ios-provisioning-portal

使用 Apple iOS Provisioning Portal 创建 iOS App