15

我正在尝试使用特定证书自动化构建 iphone 应用程序的过程。所以想象一下,如果不同的用户将他们的证书上传到系统中,并且可以立即进行代码签名。我想在没有任何交互的情况下做到这一点。我也不想用不同的用户证书弄乱系统或登录钥匙串。为此,我有:

  • 关闭了 XCODE 中要求为 aa 构建进行代码签名的要求。
  • 开发了一个 ruby​​ 脚本来通过 xcodebuild 命令行工具构建一个应用程序
  • 创建了一个脚本来为我系统的用户自动创建一个新的钥匙串
  • 编写了一个脚本来对构建的 iphone 应用程序进行代码签名。

一切正常,但是当代码设计程序尝试行使签名权限时,我需要手动输入。我的钥匙链都解锁了。奇怪的是,如果我将钥匙串设为默认钥匙串,它会起作用,但这是不可扩展的,即我在任何给定时间只能进行一个构建过程。

当我手动单击始终允许该过程时,我在钥匙串转储中得到一个如下所示的条目:

entry 1:
    authorizations (6): decrypt derive export_clear export_wrapped mac sign
    don't-require-password
    description: privateKey
    applications (2):
        0: /usr/bin/codesign (OK)

所以我认为我需要在安全中使用授权命令来为这些权限预自动化代码设计。安全手册页很差。我似乎无法使用以下命令使其工作:

安全 -v 授权 -uew 标志 | /usr/bin/codesign [指向应用程序和特定钥匙串的代码符号变量]

有没有人有任何想法?

4

6 回答 6

11

如果您使用 -A 将证书导入钥匙串,它将允许访问所有尝试请求该证书的程序。这不是很安全,但有效。您还可以使用 -T 将其限制为特定应用程序。查找在 man security 中找到的导入参数。

于 2011-03-25T15:52:54.087 回答
4

我想在这里添加到答案池中,但也重新打开我认为没有回答的部分问题。

以下命令导入身份(证书 + 私钥)并指定它应该“始终允许”对其进行代码签名访问(防止钥匙串访问警报提升用户单击按钮):

`security import Targets/CurrentTarget/Certificate.p12 -k #{KEYCHAIN} -P "#{cert_pwd}" -T /usr/bin/codesign`

此命令允许所有应用程序访问,而不仅仅是代码签名:

security import Targets/CurrentTarget/Certificate.p12 -k #{KEYCHAIN} -P "#{cert_pwd}" -A

这些命令中的任何一个都会处理每次在钥匙串中使用私钥时弹出的对话框。但是,他们不会处理您第一次请求使用私钥的权限时弹出的类似警报。此警报将在首次使用时出现,并要求您选择始终允许、拒绝或允许。之后每次(如果您使用上面的-Tor-A选项,假设钥匙保留在您的钥匙串中)您将不会看到对话框。

我的问题是:如何消除首次使用时出现的警报?

我考虑过使用 Apple Script 自动点击始终允许按钮,但由于警报是在xcodebuild命令中间触发的,我不确定这是否可行。任何帮助将非常感激!

于 2012-01-12T15:54:01.767 回答
4

在我的系统上,一旦钥匙串被解锁

安全解锁钥匙串

我只是让 xcodebuild 进行构建和代码签名。

如果您的钥匙串已解锁,则无需使用上述调用。

您可能还想检查命令 execute-with-privileges of security。

于 2011-01-16T15:30:35.270 回答
2

只是添加到上面的所有答案中:即使您的密钥/证书没有密码保护,您也需要将-P ""(空密码)传递给security import.

于 2016-01-26T14:47:00.193 回答
1

在我的情况下,将证书从登录钥匙串复制到系统钥匙串效果很好,因此您不需要进行任何命令行解锁。

于 2011-10-21T17:26:45.167 回答
1

关于每次您在钥匙串中使用私钥时弹出的对话框,此苹果脚本将处理您第一次请求使用私钥的权限时弹出的类似警报。

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

codesign 想使用密钥

于 2012-10-09T19:34:21.867 回答