开发者社区 问答 正文

如何检查两个macOS应用程序(一个经过签名和公证的代码)是否相同?

想象以下情况:

没有Mac开发人员帐户的人员A,例如正在开发开源应用程序的人员,希望使该应用程序正确地进行代码签名(并经过钉书处理并经过公证)。 B人为A人提供代码签名和公证该应用程序。 挑战:

人员A如何确保未修改来自B的签名代码?

例如,A可以再次从应用程序中删除代码签名和公证信息,然后用于diff验证原始应用程序的内容与B相同吗?如果是这样,哪个命令可以完成此任务?

还请考虑该应用程序仅仅是一个独立的可执行文件(或者,该应用程序可能包含诸如助手之类的可执行文件)的可能性,这意味着该可执行文件包含签名,而不是将其附加到bundle中Contents/_CodeSignature。

展开
收起
几许相思几点泪 2019-12-22 18:45:38 938 分享 版权
阿里云 AI 助理回答

在没有Mac开发人员帐户的人员A希望确保由具有开发者账户的人员B签名和公证的应用程序未被修改的情况下,可以采取以下步骤来验证代码签名的完整性:

  1. 使用codesign命令验证签名:macOS提供了一个名为codesign的命令行工具,可以用来验证应用程序的签名状态。A可以通过运行以下命令来检查应用的签名信息:

    codesign --verify --verbose /path/to/signed/application.app
    

    如果签名有效且未被篡改,该命令将输出验证成功的信息。如果签名无效或文件被修改,它会显示相应的错误消息。

  2. 检查公证状态:除了验证代码签名外,还可以通过spctl命令来检查应用程序是否经过了公证:

    spctl --assess --verbose /path/to/signed/application.app
    

    如果应用程序已经过公证,这条命令会显示“accepted”状态,否则会提示未通过系统策略检查。

  3. 关于diff验证:直接从已签名的应用中移除签名和公证信息来进行diff对比并不是一个推荐的方法,因为这会破坏签名的完整性。正确的做法是依赖上述提到的系统工具来验证签名和公证的状态,而不是手动比较文件内容。

  4. 独立可执行文件的考虑:对于独立的可执行文件(非.app包),同样的codesign命令依然适用。即使签名信息不是以_bundle_的形式附加,而是直接嵌入到可执行文件中,codesign命令也能正确识别并验证其签名状态。

综上所述,通过使用codesignspctl命令,A可以有效地验证由B签名和公证的应用程序是否保持原样,而无需尝试移除签名信息进行文件对比。这是确保代码完整性和来源可信性的标准方法。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答