首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codesign和Ambiguos标识匹配"Mac Developer“和"iPhone Developer”。

Codesign和Ambiguos标识匹配"Mac Developer“和"iPhone Developer”。
EN

Stack Overflow用户
提问于 2015-10-03 18:12:19
回答 3查看 6.1K关注 0票数 9

我正在测试一个库。这个过程需要在一个iOS设备上进行测试。为此,我使用了一个旧的iPad 1,运行的是iOS 5.1监狱和RedSn0w

RedSn0w不对网关管理员服务进行修补(代码签名),因此我需要使用我的开发人员帐户并对我正在测试的二进制文件进行签名(Absinthe修补程序网关管理员,以及为什么您可以使用ldid生成假签名)。

试图签署的结果如下:

代码语言:javascript
复制
$ 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生成相同的消息。

如何在签署可执行文件时消除歧义?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-03 18:45:11

模糊证书

当密钥链中存在两个相同身份的证书时,就会发生这种情况:

codesign工具只需要一个.

注意:在您的问题中提到ldid可能需要更多的澄清,说明它与苹果颁发的协同设计证书有什么关系,或者确切的关注是什么。

重复证书有时会出现在密钥链中,这是因为一个证书过期了,而该证书从未被删除。对于解决这些问题,苹果公司有一些说明,但如果以下内容不起作用,您可能需要超出正常程序的范围:

  1. 在密钥链访问中,确保打开了“查看”菜单>显示过期证书选项
  2. 单击“证书”‘类别’,然后单击密钥链访问中的“密钥链”侧栏中列出的每个密钥链。如果您看到任何副本,甚至过期的证书,请删除这些副本。
  3. 单击密钥链访问中的“键”‘类别’。
  4. 在每个密钥链中导航,查找和删除与受影响证书具有相同公共名称的任何“孤立密钥”。孤立密钥是指不被泄露三角绑定到当前存在于密钥链中的iPhone开发人员或iPhone分发证书的密钥。
  5. 如果发现并删除了任何额外的密钥或证书,请重新尝试构建。
  6. 如果在以相同的名称删除所有活动的或过期的重复证书或密钥后,该问题仍然存在,则可以尝试删除所有现有的签名证书和密钥,并使用“如何删除/撤消证书并重新开始”中的步骤将其替换为新证书和密钥?
  7. 最后,如果在创建新证书后仍然存在错误,请控制-单击密钥链访问中受影响的证书,选择“新标识首选项”并单击“证书”字段。如果您在这里看到重复的证书,这是一个已知的和不常见的问题与密钥链访问。若要解决此问题,请尝试以下操作: 密钥链访问>编辑>密钥链列表,取消勾选登录密钥链的“共享”。

如果返回到密钥链列表中,您发现登录密钥链仍然标记为Shared,请创建以下文件的备份,然后如果它们存在,则删除它们:

代码语言:javascript
复制
    /Library/Preferences/com.apple.security-common.plist
    ~/Library/Preferences/com.apple.security.plist

然后重试构建.

如果无法通过上述步骤解决问题,请尝试搜索错误消息中列出的证书之一。一旦您发现有问题的证书,请删除过期的证书或与您需要的证书冲突的证书。

多个协同设计证书(而不是副本)

如果您有多个协同设计证书,则需要通过使用-s选项指定使用哪个证书(如果从命令行进行协同设计):

代码语言:javascript
复制
codesign -s <certificate name> -vvvv foo.app

-s,--使用此标识在给定路径上的代码签名。请参阅man中的签名身份。

可选

-v,--验证代码签名的请求验证。如其他行动(签署、展示等)也被请求,-v被解释为--详细的意思。

例如,在您的例子中:

代码语言:javascript
复制
codesign -s "iPhone Developer: John Doe" cryptest.app
票数 16
EN

Stack Overflow用户

发布于 2019-03-18 19:57:18

如果您有多个(冲突的)证书名称,则可以创建一个新的密钥链并将所需的证书导入其中。“密钥链访问”中的“密钥链”列表是一个可排序的列表。因此,请确保您的新密钥链位于列表的首位。

然后将--keychain <path to new keychain file>添加到codesign命令行。路径通常为/Users/<username>/Library/Keychains/<keychain name>.keychain-db

票数 2
EN

Stack Overflow用户

发布于 2020-03-27 07:30:39

另一种解决歧义的方法(至少是黑客)是创建一个密钥链标识首选项。

来自codesign手册页(man 1 codesign):

代码语言:javascript
复制
     -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选项:

代码语言:javascript
复制
codesign --verbose --sign codesign-dev-id-app --timestamp foo.dmg

这对我起了作用(在macOS 10.13上),而将证书和密钥放在不同的密钥链中,即使在显式指定--keychain (codesign仍然查看所有密钥链)时也是如此。应该谨慎选择字符串,以避免与其预期目的发生意外冲突。开发人员拥有的域下的虚拟URL可能是一个不错的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32925844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档