带有配置文件且没有私钥的 xcodebuild

Posted

技术标签:

【中文标题】带有配置文件且没有私钥的 xcodebuild【英文标题】:xcodebuild with provision profile and no private key 【发布时间】:2018-01-18 07:48:04 【问题描述】:

我们正在一家大型企业公司中构建一个 MacOS 应用程序,我们需要为我们的桌面应用程序启用推送通知。

为了支持通知,我们需要使用配置文件构建我们的应用程序 -

xcodebuild PROVISIONING_PROFILE="<provision profile id>"

这会导致错误 -

Check dependencies
Code Signing Error: No signing certificate "<Cert name>" found:  
No "<Cert name>" signing certificate matching team ID "<team id>" 
with a private key was found.

看起来我们需要在我们的机器上安装私钥。 对私钥的访问受到限制,因为我们在一家大型企业中工作,其中许多应用都是根据一个分发证书发布的。

是否可以在没有私钥的情况下构建 mac os 应用程序(保留推送通知功能)?理想情况下,我们希望在开发过程中构建没有私钥的应用程序,然后在我们想要将其发布给全世界时对其进行签名。

我们尝试了以下失败 -

xcodebuild clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO PROVISIONING_PROFILE="<profile id>"

【问题讨论】:

您可以将私钥和证书从其他 mac 导出到您的 mac,然后您可以签署临时配置文件。 我们想让签名成为发布过程的一部分,而不是构建过程。由于我们在本地机器上构建,我们通常无法访问私钥。发布机器比构建机器更安全。 因此为发布而构建的机器应该具有用于​​分发的签名身份文件(配置文件、证书、私钥)。开发人员应该只需要进行调试构建,它可以具有开发签名身份,例如它不需要分发证书和密钥。您应该能够通过创建一个锁定的构建机器来处理这个问题。不幸的是,您的问题的答案是否定的。已签名的应用需要证书的私钥才能进行签名。 【参考方案1】:

您的问题的简单答案是。为了在 MacOS 或 ios 上签名应用程序,您需要拥有签名身份文件。这意味着您将需要配置文件、证书和证书的私钥。

如果您可以在没有私钥的情况下签署应用程序,那么任何人都可以冒充您为开发人员,这在开发人员信任方面将是一个大问题。

不过,实际上,您应该拥有一个用于开发的签名身份与用于发布的签名身份不同。使用开发配置文件、证书和密钥进行开发(您可以为开发人员提供开发证书的私钥)。您有一个单独的分发签名身份,该身份仅锁定在官方构建机器上。

【讨论】:

以上是关于带有配置文件且没有私钥的 xcodebuild的主要内容,如果未能解决你的问题,请参考以下文章

openssl制作证书全过程及https实现

数字证书

jenkins Publish over SSH 的配置与使用

哪个存储类可以防止私钥的逆向工程?

KeyVault 生成的带有可导出私钥的证书

使用 powershell 导出带有私钥的证书,包括路径中的所有证书