如何在没有任何人工干预的情况下,从新的钥匙串中为代码添加授权代码

cmo*_*mos 13 iphone macos xcode keychain

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

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

一切正常,但我需要在codeign程序尝试行使签名权限时手动点击输入.我的钥匙链全都解锁了.奇怪的是,如果我将钥匙串作为默认钥匙串,它可以工作,但这是不可扩展的,即我只能在任何给定时间进行一个构建过程.

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

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)
Run Code Online (Sandbox Code Playgroud)

所以我认为我需要在安全性中使用authorize命令来预先自动化这些权限的代码签名.安全手册页非常糟糕.我似乎无法使用这样的命令来使用它:

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

有没有人有任何想法?

cmo*_*mos 11

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


Alf*_*sen 5

我想添加到此处的答案库,但也重新打开部分我认为尚未得到解答的问题。

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

`security import Targets/CurrentTarget/Certificate.p12 -k #{KEYCHAIN} -P "#{cert_pwd}" -T /usr/bin/codesign`
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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


dwe*_*ery 4

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

安全解锁钥匙串

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

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

您可能还想检查命令执行权限的安全性。