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

标签 ios ios5 ios6

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

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

最佳答案

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

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

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

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

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

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

关于ios - 了解 iOS 中的配置文件和证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15238261/

相关文章:

ios - 在 UITableView 上选择行时委托(delegate)不起作用

iphone - iPhone 应用程序使用的内存

ios - 在 iOS 中触摸时更改按钮的字体颜色

ios - 智能应用横幅显示为空白灰色条

ios - 将 RGB 值转换为 UIColor?

ios - NSURL(字符串 : fullURL) returns error

ios - Xcode 5 iPhone 模拟器没有手机形状

ios - 未调用 MFMailComposeViewController 委托(delegate)方法

objective-c - 在 UITextView 上的 NSAttributedString 上设置字体忽略行距

ios - 获取NSUserdefaults时出现问题