codesign始终不会通过终端找到身份错误

问题描述 投票:34回答:5

我已经浏览了已经存在的问题,但是没有一个解决了我的问题(例如重新创建证书)。我已经构建了一个应用程序,其中在应用程序内部我几乎没有可执行文件,文件夹和框架。每当我尝试执行codesign -s“我们的身份”时,my.app始终找不到身份。有人可以逐步进行此操作。

codesign -s "Developer ID Application: Sai***** (123123123J)" out/Release/Sai.app

错误

Developer ID Application: Sai****** (123123123J): no identity found,

我尝试删除“开发人员ID应用程序”和序列号,但所有内容均给出相同的错误

在这些lines中寻求帮助

谢谢

macos osx-snow-leopard code-signing
5个回答
23
投票

尽管我没有为Apple开发代码签名这样做,但我仍然认为我具有一些有价值的内部信息,可以帮助您调试此类问题。区别在于,当您从Apple获得证书时,我创建了自己的证书。

检查证书的信任度,必须对其信任以进行代码签名(在优胜美地上,它是钥匙串访问中证书视图的信任度部分中的倒数第三)。请注意,对于用于代码签名的证书,证书应该位于登录钥匙串中,而我需要在系统钥匙串中使用它。

起初,由于对密钥链进行代码签名,该证书并不为人所知,因为缺少扩展目的“代码签名”,如果您查看密钥链并双击证书,则可以找到此证书:

enter image description here

我已解决(您无法修复它,因为Apple向您提供了证书。扩展名应该就在那儿:]]

enter image description here

[然后,我将证书从钥匙串拖放到桌面后,将证书添加到受信任的签名证书中,这会创建〜/ Desktop / gdb-cert.cer(请注意,您可以省略-d和-r trustRoot :

$ sudo security add-trusted-cert -d -r trustRoot -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer

这有点棘手,因为我被一些互联网帖子误导了,并且没有看手册页。有人说您应该使用添加信任(https://llvm.org/svn/llvm-project/lldb/trunk/docs/code-signing.txt)。可怕的是命令成功执行,但是没有执行应有的操作。

之后,我像这样在受信任的证书中找到了新证书:

$ security find-identity -p codesigning

Policy: Code Signing
  Matching identities
      1) E7419032D4..... "Mac Developer: FirstName LastName (K2Q869SWUE)"    (CSSMERR_TP_CERT_EXPIRED)
      2) ACD43B6... "gdb-cert"
  2 identities found

  Valid identities only
      1) ACD43... "gdb-cert"
  1 valid identities found

在我的情况下,Apple证书已过期,但是我用来签名gdb的证书却没有(嗯,我是自己创建的)。还应注意,该策略的名称与“安全性添加受信任的证书”(-p codeSign)和“安全性查找身份”命令(-p codesigning)不同。然后,我继续签署gdb,而且我也总是得到:

$ codesign --sign gdb-cert.cer --keychain ~/Library/Keychains/login.keychain `which gdb`
  gdb-cert.cer: no identity found

因为我的印象是我必须将cert文件的文件名赋予--sign选项,但实际上是我应该提供的证书的CN,并且应该位于信任库中。双击钥匙串中的证书,可以在此处找到CN:

enter image description here

或在“安全性查找身份-p代码签名”的上述输出中。然后我继续签名,必须给它正确的钥匙串。在您的情况下,它必须是〜/ Library / Keychains / login.keychain,在我的情况下是System.keychain:

 codesign -s gdb-cert --keychain /Library/Keychains/System.keychain `which gdb` 

然后这给了我一个可以正常工作的gdb,它应该给您签名的应用程序。


53
投票

我对此也有些麻烦。仔细检查您的代码签名身份是否在钥匙串中,并且您可以考虑使用SHA-1指纹而不是-s之后的名称。

您可以通过打开Keychain Access并选择Developer ID Application: FOO证书,然后选择获取信息来找到SHA-1指纹。从这里滚动到信息的底部,直到到达Fingerprints。可以复制SHA-1指纹,并且您必须删除所有空格,但是之后您将拥有一个40个字符的标识符,该标识符将适合放置在codesign语句中的-s之后。

如果仍然找不到钥匙,请从终端上尝试以下操作:

certtool y | grep Developer\ ID

并在Developer ID Application中寻找带有Common Name的任何内容,以验证证书是否确实在可从终端访问的钥匙串中。如果没有任何响应,则表明Terminal会话无法使用包含凭据的钥匙串。这样做的原因包括诸如钥匙串被锁定,外壳程序以另一个用户身份运行,以不同的权限执行命令(例如sudo)。

执行上述命令后,至少应具有以下条件:

Developer ID Application: <your company name>
Developer ID Installer: <your company name>
Developer ID Certification Authority

如果没有这三个元素,则应下载缺少的元素。尽管您现在可能<>来构建安装程序,但随身携带它也没有害处。可以从Apple's Developer site证书,标识符和配置文件

选项卡的Mac证书部分下载Application和Installer元素。您应该那里没有过期的列表。您可能在那里也有过期的列表。要在您的钥匙串中安装证书:
    访问
  1. Apple Developer Site
访问
  • Mac Dev Center
  • 访问
  • 证书,标识符和配置文件链接
  • 从门户下载证书
  • 双击证书和钥匙串访问应该打开
  • 允许钥匙串访问以将证书添加到您的钥匙串中
  • Developer ID证书颁发机构

  • 应该已经由Xcode安装,但是如果没有,则可以自己安装。您将需要单独下载Developer ID Authority或单击Certificates选项卡中的+链接,然后使用底部的链接下载证书。这也是确保您拥有

    Apple Worldwide Developer Relations Certification Authority]的好时机,这是某些签名工具的基础。它应该由Xcode安装程序安装在您的System

    钥匙串中,并且可以直接从上方Certificates选项卡中的+链接或从Apple WWDR CA下载。根据Apple的App Distribution Guide,存在适用于每个证书和密钥的特定密钥链:

      您的私钥和签名证书(
    • Developer ID安装程序
    Developer ID应用程序
    和App Store证书)应位于您的login钥匙串中
  • Apple全球开发者关系认证机构]和开发者ID认证机构属于系统钥匙串
  • 您的开发人员证书也属于您的
  • login
  • 钥匙串
    钥匙串维护

    因为Xcode会自动操纵钥匙串,并且由于配置文件发生更改时会定期重新颁发某些证书(尽管不是开发人员ID,因为它具有多年证书并且不需要配置文件,所以您可以最终进行传播)钥匙串中不必要和可能造成混淆的证书。最好在它们过期后清除它们,因为它们会给Xcode造成一些混乱。

    警告

      在对钥匙串进行任何维护之前,请确保已备份了钥匙串
  • 此过程旨在删除与开发相关的不必要的证书,如果证书不是以
  • Mac Developer,3rd Party Mac Developer
  • iPhone Developer或Developer ID]开头>,此时请勿与他们混淆。如果您不小心删除了通过电子邮件收到的证书(例如),即使它已过期,则可能无法阅读收到的电子邮件。要做的事情:

      退出Xcode
  • 运行钥匙串急救(来自
  • 钥匙串访问
  • ,并验证您的钥匙串是否正常]单击左侧栏中的
  • 证书
  • 类别找到上述任何过期的开发人员证书。它们将在右下角显示一个小
  • X。
  • 选择要删除的证书,然后使用
  • 文件>导出项目...
  • 备份它们将此文件放在安全的地方,并给它一个好的密码
  • 删除已备份的证书
  • 浏览剩余的证书,并确认您具有上一节中提到的证书。如果您不这样做,则需要下载并可能对其进行更新。
  • 验证证书是否在上面指示的钥匙串中(例如,所有签名证书都应在您的
  • login钥匙串中)
  • 答案终于很简单。我的私钥丢失了。为此,我吊销了证书,并按照开发人员程序中的步骤进行(特别是在此过程中创建CSR证书,除非获得证书,否则我不会多次获得此证书)。

    甚至

    certtool y | grep "Developer ID Application: xxxx"

    无法显示任何结果,我想这是访问所需钥匙串的问题。因此,我首先进行了验证,私钥可以被钥匙串本身中的任何应用程序访问,然后我开始在certtool命令中使用k=/Users/myUser/Library/Keychains/login.keychain选项,并在此之后我对

    进行了相同操作

    codesign --keychain /Users/myUser/Library/Keychains/login.keychain --force --verbose -s "Developer ID Application: xxxx"

    甚至

    certtool y | grep "Developer ID Application: xxxx"

    无法显示任何结果,我想这是访问所需钥匙串的问题。因此,我首先进行了验证,私钥可以被钥匙串本身中的任何应用程序访问,然后我开始在certtool命令中使用k=/Users/myUser/Library/Keychains/login.keychain选项,并在此之后我对进行了相同操作

    codesign --keychain /Users/myUser/Library/Keychains/login.keychain --force --verbose -s "Developer ID Application: xxxx


    9
    投票
    答案终于很简单。我的私钥丢失了。为此,我吊销了证书,并按照开发人员程序中的步骤进行(特别是在此过程中创建CSR证书,除非获得证书,否则我不会多次获得此证书)。

    甚至

    certtool y | grep "Developer ID Application: xxxx"

    无法显示任何结果,我想这是访问所需钥匙串的问题。因此,我首先进行了验证,私钥可以被钥匙串本身中的任何应用程序访问,然后我开始在certtool命令中使用k=/Users/myUser/Library/Keychains/login.keychain选项,并在此之后我对

    进行了相同操作

    codesign --keychain /Users/myUser/Library/Keychains/login.keychain --force --verbose -s "Developer ID Application: xxxx"


    3
    投票
    甚至

    certtool y | grep "Developer ID Application: xxxx"

    无法显示任何结果,我想这是访问所需钥匙串的问题。因此,我首先进行了验证,私钥可以被钥匙串本身中的任何应用程序访问,然后我开始在certtool命令中使用k=/Users/myUser/Library/Keychains/login.keychain选项,并在此之后我对


    0
    投票
    甚至
    © www.soinside.com 2019 - 2024. All rights reserved.