无法使用Keychain访问导入代码签名公钥或私钥(Mac OS X Mavericks)

时间:2014-05-08 13:29:26

标签: ios xcode key keychain

在尝试构建iOS项目(在XCode中)时,我需要导入我同事的公钥和私钥以获取代码签名身份,但我无法这样做,因为我在Keychain Access中收到错误消息“发生错误。无法导入项目./无法检索此项目的内容“

详细信息:

我的同事的计算机上有两把钥匙,从钥匙扣中将它们作为两个文件导出:

Roomer Inc.p12(私钥)

Roomer Inc.pem(公钥)

当他导出这些时,他将密码留空(虽然我们也尝试使用密码“test”并得到相同的结果)。

当我双击Roomer Inc.p12(私钥)时,它会在Keychain Access中打开并让我选择钥匙串(默认情况下选择“登录”)

我点击“添加”,然后提示我输入钥匙串的密码(我留空)

接下来,我总是在Keychain访问中看到此消息:

screenshot of error

但是,尽管出现此消息,但当我单击“确定”时,我会看到“Roomer Inc”的新私钥条目。请注意,此条目是“登录”键链中的私钥,正如我所料,但没有到期日期(应该吗?)

接下来,对于Roomer Inc.pem文件(公钥),我被要求选择钥匙串(“登录”),然后点击添加

然后,我也得到了“发生错误。无法导入项目。/该项目的内容无法检索”公共密钥的消息。但是在这种情况下(与私钥不同),我没有看到任何与我刚添加的内容相对应的条目。

因此,看起来私钥条目可能或可能不正常(我无法验证),并且如果没有此错误消息,则无法在密钥链中安装Roomer的公钥条目。请注意,我还尝试使用security import命令导入公钥:

$ security import Roomer \ Inc.pem -f pkcs12~ / Library / Keychains / login.keychain

导入1键。

当我这样做时,虽然命令返回“1 key imported”,但我在Keychain Access窗口中看不到“Roomer Inc”的公钥(我关闭了Keychain Access并重新打开它)。

无论哪种方式,我们都发现这是我们的拦截器。 (当然,症状是XCode项目不会为AdFoc配置文件构建,以便与TestFlight一起使用)。我没有关于XCode构建和TestFlight设置的其他步骤,因为我们认为核心问题与导入密钥有关,如上所述。

1 个答案:

答案 0 :(得分:26)

我们发现了我们的问题,我在这里发布我的答案,以便其他人可能会发现它有用。

问题实际上是Keychain Access的UX问题。让我备份并提供一些上下文:当您使用Apple创建分发证书时,您可以基于PRIVATE KEY和基于应用程序的权限创建它。

在Keychain Access中,分发证书在其创建的私钥名称下面列为子级。这里有一个问题:当您在Keychain访问中使用搜索框时(在我的情况下,我们输入“Roomer”,因为这是我们的分发证书上的名称),它不会查找具有该名称的证书,它将查找附加到该名称的私钥的证书。

因此,我的同事根据名为“Jorge Davila”(他的名字)的私钥创建了分发证书,即使分发证书名为“iPhone Distribution:Roomer Inc。”

当他在Keychain Access中搜索“Roomer”时,搜索结果中没有显示正确的那个,因为此证书的密钥被命名为“Jorge Davila”而不是“Roomer”。因此,他出口了错误的证书并没有意识到,因为有其他人(有些人已过期)有这个名字。

以下是正确的看法:

这是Keychain Access的用户体验中一个相对细微的问题,而且搜索工具没有为您提供您期望的结果。我发布这个答案,希望其他人可能觉得它很有用。