我正在测试一个库。这个过程需要在一个iOS设备上进行测试。为此,我使用了一个旧的iPad 1,运行的是iOS 5.1监狱和RedSn0w。
RedSn0w不对网关管理员服务进行修补(代码签名),因此我需要使用我的开发人员帐户并对我正在测试的二进制文件进行签名(Absinthe修补程序网关管理员,以及为什么您可以使用ldid生成假签名)。
试图签署的结果如下:
$ codesign -s "John Doe" cryptest.exe
John Doe: ambiguous (matches "Mac Developer: John Doe (3VT8SJ9C5)" and "iPhone Developer:
John Doe (3VT8SJ9C5)" in /Users/jdoe/Library/Keychains/login.keychain)我通过了codesign(1),但是我不知道如何解决它,因为它们是相同的密钥it。使用KeyID生成相同的消息。
如何在签署可执行文件时消除歧义?
发布于 2015-10-03 18:45:11
模糊证书
当密钥链中存在两个相同身份的证书时,就会发生这种情况:
codesign工具只需要一个.
注意:在您的问题中提到
ldid可能需要更多的澄清,说明它与苹果颁发的协同设计证书有什么关系,或者确切的关注是什么。
重复证书有时会出现在密钥链中,这是因为一个证书过期了,而该证书从未被删除。对于解决这些问题,苹果公司有一些说明,但如果以下内容不起作用,您可能需要超出正常程序的范围:
如果返回到密钥链列表中,您发现登录密钥链仍然标记为Shared,请创建以下文件的备份,然后如果它们存在,则删除它们:
/Library/Preferences/com.apple.security-common.plist
~/Library/Preferences/com.apple.security.plist然后重试构建.
如果无法通过上述步骤解决问题,请尝试搜索错误消息中列出的证书之一。一旦您发现有问题的证书,请删除过期的证书或与您需要的证书冲突的证书。
多个协同设计证书(而不是副本)
如果您有多个协同设计证书,则需要通过使用-s选项指定使用哪个证书(如果从命令行进行协同设计):
codesign -s <certificate name> -vvvv foo.app-s,--使用此标识在给定路径上的代码签名。请参阅man中的签名身份。
可选
-v,--验证代码签名的请求验证。如其他行动(签署、展示等)也被请求,-v被解释为--详细的意思。
例如,在您的例子中:
codesign -s "iPhone Developer: John Doe" cryptest.app发布于 2019-03-18 19:57:18
如果您有多个(冲突的)证书名称,则可以创建一个新的密钥链并将所需的证书导入其中。“密钥链访问”中的“密钥链”列表是一个可排序的列表。因此,请确保您的新密钥链位于列表的首位。
然后将--keychain <path to new keychain file>添加到codesign命令行。路径通常为/Users/<username>/Library/Keychains/<keychain name>.keychain-db。
发布于 2020-03-27 07:30:39
另一种解决歧义的方法(至少是黑客)是创建一个密钥链标识首选项。
来自codesign手册页(man 1 codesign):
-s, --sign identity
Sign the code at the path(s) given using this identity. See
SIGNING IDENTITIES below.
[...]
SIGNING IDENTITIES
[...]
The identity is first considered as the full name of a keychain identity
preference. If such a preference exists, it directly names the identity
used. Otherwise, the identity is located by searching all keychains for a
certificate whose subject common name (only) contains the identity string
given.在密钥链访问中的证书上下文菜单中,有一个项New首选项.,其中可以给出将证书与之关联的URL或电子邮件地址。这是用于允许将客户端证书与网站或电子邮件帐户一起使用。,但是任意字符串可以工作,例如codesign-dev-id-app。字符串直接交给--sign选项:
codesign --verbose --sign codesign-dev-id-app --timestamp foo.dmg这对我起了作用(在macOS 10.13上),而将证书和密钥放在不同的密钥链中,即使在显式指定--keychain (codesign仍然查看所有密钥链)时也是如此。应该谨慎选择字符串,以避免与其预期目的发生意外冲突。开发人员拥有的域下的虚拟URL可能是一个不错的选择。
https://stackoverflow.com/questions/32925844
复制相似问题