想象以下情况:
没有Mac开发人员帐户的人员A,例如正在开发开源应用程序的人员,希望使该应用程序正确地进行代码签名(并经过钉书处理并经过公证)。 B人为A人提供代码签名和公证该应用程序。 挑战:
人员A如何确保未修改来自B的签名代码?
例如,A可以再次从应用程序中删除代码签名和公证信息,然后用于diff验证原始应用程序的内容与B相同吗?如果是这样,哪个命令可以完成此任务?
还请考虑该应用程序仅仅是一个独立的可执行文件(或者,该应用程序可能包含诸如助手之类的可执行文件)的可能性,这意味着该可执行文件包含签名,而不是将其附加到bundle中Contents/_CodeSignature。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在没有Mac开发人员帐户的人员A希望确保由具有开发者账户的人员B签名和公证的应用程序未被修改的情况下,可以采取以下步骤来验证代码签名的完整性:
使用codesign
命令验证签名:macOS提供了一个名为codesign
的命令行工具,可以用来验证应用程序的签名状态。A可以通过运行以下命令来检查应用的签名信息:
codesign --verify --verbose /path/to/signed/application.app
如果签名有效且未被篡改,该命令将输出验证成功的信息。如果签名无效或文件被修改,它会显示相应的错误消息。
检查公证状态:除了验证代码签名外,还可以通过spctl
命令来检查应用程序是否经过了公证:
spctl --assess --verbose /path/to/signed/application.app
如果应用程序已经过公证,这条命令会显示“accepted”状态,否则会提示未通过系统策略检查。
关于diff验证:直接从已签名的应用中移除签名和公证信息来进行diff对比并不是一个推荐的方法,因为这会破坏签名的完整性。正确的做法是依赖上述提到的系统工具来验证签名和公证的状态,而不是手动比较文件内容。
独立可执行文件的考虑:对于独立的可执行文件(非.app包),同样的codesign
命令依然适用。即使签名信息不是以_bundle_的形式附加,而是直接嵌入到可执行文件中,codesign
命令也能正确识别并验证其签名状态。
综上所述,通过使用codesign
和spctl
命令,A可以有效地验证由B签名和公证的应用程序是否保持原样,而无需尝试移除签名信息进行文件对比。这是确保代码完整性和来源可信性的标准方法。