尽管我没有为Apple开发代码签名这样做,但我仍然认为我具有一些有价值的内部信息,可以帮助您调试此类问题。区别在于,当您从Apple获得证书时,我创建了自己的证书。
检查证书的信任度,必须对其信任以进行代码签名(在优胜美地上,它是钥匙串访问中证书视图的信任度部分中的倒数第三)。请注意,对于用于代码签名的证书,证书应该位于登录钥匙串中,而我需要在系统钥匙串中使用它。
起初,由于对密钥链进行代码签名,该证书并不为人所知,因为缺少扩展目的“代码签名”,如果您查看密钥链并双击证书,则可以找到此证书:
我已解决(您无法修复它,因为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
这有点棘手,因为我被一些互联网帖子误导了,并且没有看手册页。有人说您应该使用添加信任(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:
或在“安全性查找身份-p代码签名”的上述输出中。然后我继续签名,必须给它正确的钥匙串。在您的情况下,它必须是〜/ Library / Keychains / login.keychain,在我的情况下是System.keychain:
codesign -s gdb-cert --keychain /Library/Keychains/System.keychain `which gdb`
然后这给了我一个可以正常工作的gdb,它应该给您签名的应用程序。