我查看了已经存在的问题,但没有解决我的问题(比如重新创建证书)。我已经构建了一个应用程序,在应用程序内部我有几个可执行文件和文件夹和框架。每当我尝试编码--s“我们的身份”时,my.app始终没有找到任何身份。有人可以一步一步地给出这个过程。
codesign -s "Developer ID Application: Sai***** (123123123J)" out/Release/Sai.app
错误
Developer ID Application: Sai****** (123123123J): no identity found,
我尝试删除“开发者ID应用程序”和序列号,但一切都给出了相同的错误
在这些lines
中寻求帮助谢谢
答案 0 :(得分:52)
我也遇到了一些麻烦。仔细检查您的代码签名身份是否在您的钥匙串中,您可以考虑在-s之后使用SHA-1指纹而不是名称。
您可以通过打开Keychain Access
并选择Developer ID Application: FOO
证书,然后选择获取信息来找到SHA-1指纹。在此处,滚动到信息的底部,直至到达指纹。此处的SHA-1指纹可以复制,您必须删除所有空格,但之后您将拥有一个40个字符的标识符,该标识符适合放在您的codesign语句中-s
之后。< / p>
如果您在查找密钥时仍遇到问题,请在终端中尝试以下操作:
certtool y | grep Developer\ ID
并在Developer ID Application
中查找Common Name
的任何内容,以验证证书是否实际位于可从终端访问的钥匙串中。如果您没有看到任何响应,则表明包含您的凭据的钥匙串对您的Terminal
会话不可用。这样做的原因包括锁定钥匙串,作为另一个用户运行的shell,执行具有不同权限的命令(例如sudo
)。
执行上述命令后,您应至少具备以下条件:
Developer ID Application: <your company name>
Developer ID Installer: <your company name>
Developer ID Certification Authority
如果你没有全部三个,你应该去下载缺少的元素。虽然您目前可能需要来构建安装程序,但使用它并没有什么坏处。可以从证书,标识符和&amp;部门的 Mac证书部分下载应用程序和安装程序元素。 Apple's Developer site上的个人资料标签。您应该在那里没有过期的列表。您可能还有已过期的商家信息。要在您的钥匙串中安装证书:
开发者ID证书颁发机构应该由Xcode安装,但如果不是,则可以自行安装。您需要从Developer ID Authority单独下载,或者点击证书标签中的 + 链接,然后使用底部的链接下载证书。< / p>
这也是确保您拥有 Apple全球开发者关系认证中心的好时机,这是一些签名工具的基础。它应该安装在系统钥匙串中,由Xcode安装程序安装,并且可以直接从上面证书标签中的 + 链接下载或从Apple WWDR CA
根据Apple的App Distribution Guide,有适用于每个证书和密钥的特定钥匙链:
因为Xcode会自动操作钥匙串,并且因为在配置文件更改时会定期重新颁发某些证书(虽然不适用于开发人员ID,因为它具有多年证书并且不需要配置文件),您最终可能会在您的钥匙串中传播不必要且可能令人困惑的证书。最好在它们过期时将它们清理干净,因为它们会给Xcode带来一些混乱。
<强>警告强>
要做的事情:
答案 1 :(得分:22)
虽然我没有为苹果开发代码签名做这个,但我仍然认为我有一些有价值的内部可以帮助你调试这样的问题。不同的是,当你从苹果公司获得证书时,我创建了自己的证书。
检查证书的信任度,必须信任代码签名(在优胜美地上,这是密钥链访问中证书视图的信任部分中的第三个)。请注意,对于您的代码签名,证书应该在登录密钥链中,我需要在系统密钥链中。
起初,证书不知道是否与钥匙串协商,因为缺少扩展目的“代码签名”,如果你查看钥匙串并双击证书,你可以找到它:
我修正了(你无法修复它,因为Apple为你提供了证书。扩展应该就在那里):
然后我将证书添加到受信任的签名证书中,之后我将证书从钥匙串拖放到我的桌面,创建了〜/ 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
这有点棘手,因为我被一些互联网帖子误导了,并没有看到手册页。有些人说你应该使用add-trust(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的那个证书不是(嗯,我自己就是创建了它)。另请注意,对于“security add-trusted-cert”( - p codeSign)和“security find-identity”命令(-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:
或在“security find-identity -p codesigning”的上述输出中。然后我继续签名,我不得不给它正确的钥匙串。在你的情况下,这将是〜/ Library / Keychains / login.keychain,在我的例子中是System.keychain:
codesign -s gdb-cert --keychain /Library/Keychains/System.keychain `which gdb`
然后给了我一个工作的gdb,它应该给你一个签名的应用程序。
答案 2 :(得分:8)
答案终于很简单了。我的私钥丢失了。 为此,我撤销了证书,并按照其在开发人员计划中的步骤(特别是在此过程中创建了CSR证书,除非我撤销证书,否则我没有多次获得证书)。
答案 3 :(得分:3)
甚至
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"
答案 4 :(得分:0)
甚至
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