将codesign添加到私钥ACL而无需使用Keychain

14
我正在尝试为一组iPhone应用程序设置持续构建/集成。
我有:
- 一个专用的Mac Mini。 - 一个名为"build"的用户帐户 - 使用plist在/Users/build/Library/LaunchAgents中放置Hudson作为build的LaunchAgent
(尝试过作为hudson运行的系统范围LaunchDaemon,但无法访问build用户的登录钥匙串。故事很长,充满了痛苦。)
- 系统设定为在启动时自动登录"build",以便启动Hudson。
最大的问题是代码签名和Keychain。
我们代表客户的开发者身份创建代码,因此我们有几个开发者身份,并将添加更多身份。
我想把Mini放在一个深色的房间里,永远不再看它,但第一次使用开发者身份进行构建时,会弹出一个GUI对话框,询问是否要始终允许codesign访问开发者身份。
假设您这样做,该对话框将修改密钥链访问控制列表(ACL),以允许codesign。
您可以通过打开Keychain Access,展开证书,选择私钥,右键单击,选择Get Info,然后切换到Access Control选项卡来查看此内容。 "处女"密钥只会在其"始终允许"应用程序列表中具有Keychain Access。您已在对话框中使用和确认的密钥也将具有codesign。
这个框提供了一种添加应用程序的方法,但是您会得到标准的Finder文件选择器,其中隐藏了Unix文件夹。无法导航到 /usr/bin/codesign。因此手动添加是不可能的!
有人知道解决这个问题的方法吗? 我知道一种方法使用“security import”的 -T 开关,但是在首次导入密钥时必须指定ACL,因此在Keychain GUI中添加的任何密钥都必须被丢弃并重新导入。并不是很好。

当你说“无法导航到 /usr/bin/codesign”时,你是什么意思?/usr/bin/codesign只是一个程序,如果你需要在Finder中打开/usr/bin,请使用“open /usr/bin”。 - Daniel
在Safari中,“vnc://miniName.local”是一种方法,您可以每个项目远程使用该机器。 Scootklein的AppleScript解决方案看起来应该可以工作。 - Adam Eberbach
不,该密钥的“获取信息”对话框,在访问控制选项卡上,并没有手动输入“/usr/bin/codesign”的方法 - 您必须单击加号按钮,这会为您提供一个“Finder清理过的”视图,其中从Macintosh HD的根目录中不显示任何隐藏条目(如/usr)。 然而,验证这一点让我想到了另一个解决方案... - David Boike
我发现绕过文件对话框限制的一个技巧是将文件夹(/usr/bin)放入“位置”侧边栏中,然后您可以从对话框内部选择它(除非它是非标准文件对话框)。 - Tim
-T 无论如何也不起作用,因为 GUI 仍然要求访问私钥。 - malhal
4个回答

20

通常,密钥链的“清理”文件系统版本不会让您访问隐藏的 /usr/bin 目录,但我找到了一个方法来绕过此限制。

  1. 使普通的Finder窗口显示所有文件。如果您不知道如何做到这一点,请参阅此文章
  2. 在普通的Finder窗口中,导航到 /usr/bin
  3. 将bin拖到侧边栏的“位置”区域。现在,bin是您可以从任何地方访问的快捷方式。
  4. 在密钥链的“获取信息”->“访问控制”面板中,单击“+”按钮以打开查找应用程序对话框。
  5. 点击现在位于侧边栏上的bin。
  6. 导航并选择codesign。
  7. 点击保存更改按钮。

通常情况下,当还有其他好的、有效的回答时,我会不愿将自己的回答标记为“已接受”。我这样做的唯一原因是,我找到的解决方案可以提前完成,而scootklein的回答更具反应性。 - David Boike

6

我注册了一个账号只是为了感谢David Boike,他的方法很棒,帮助了我很多。但是有更好的方法来解决这个问题。

Open File Dialog press 'Cmd' + 'Shift' + '.'

这个组合键应该可以切换文件系统中隐藏条目的可见性。

如果这个组合键没有作用,尝试将演示模式更改为“列表”或“网格”,然后再试一次。

谢谢,祝你好运!


4

在尝试使用安全性或certtool添加ACL权限后,我通过编写一个applescript解决了问题,该脚本可以“点击”“始终允许”按钮。

#!/usr/bin/osascript
tell application "System Events"
  tell window 1 of process "SecurityAgent"
    click button "Always Allow" of group 1
  end tell
end tell

3

好的,我花了将近半天的时间才解决了这个问题,但现在它可以正常工作了。我正在遵循这篇文章

文章展示了使用-A选项添加证书,但是这对我不起作用。

security import "ADistribution.p12" -k appledev -f pkcs12 -A -P ""

这个问题提到了 -T 选项,这对我来说有效。

security import "Distribution.p12" -k appledev -f pkcs12 -P "" -T /usr/bin/codesign

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接