如何确定Gatekeeper拒绝已签名的可执行文件的原因



我们有一套多平台的命令行可执行文件和库,可以移植到Mac。文件布局为

  • /应用程序/
    • (公司文件夹(/
      • (我们的UI(.app
      • (产品名称(/
        • bin/
          • 。。。可执行文件
        • lib/
          • 。。。dylibs
        • (其他东西(/

这是在一个代码签名的DMG中提供的,应用程序也是如此。这在Catalina之前还可以。

现在在Catalina上,我们已经对所有可执行文件、dylib、应用程序(包括嵌套在顶级应用程序框架中的应用程序(、框架和DM本身进行了代码签名。当我们对其进行公证时,生成的JSON日志没有列出任何问题。但是,当我运行任何依赖于dylib的可执行程序时,我会收到一个弹出窗口,告诉我"无法识别开发人员"。即使它已经签名和公证OK。使用-dvvv选项运行代码签名包括以下内容:

  • SHA-256哈希选择
  • 终止于Apple Root CA的授权机构条目列表
  • TeamIdentifier条目
  • 时间戳
  • 运行时间:10.13.0

问题我该如何解决此问题,或者至少让Gatekeeper告诉我为什么不接受此文件?也许是一个日志,或者相当于spctl——评估文件而不是应用程序?

观测

  • 只有当
    • 操作系统是Catalina
    • 它在/Applications文件夹下
    • 在/Applications之外(例如在桌面上的文件夹中(,这种情况只会偶尔发生(有时它声称第一次尝试时无法加载dylib,稍后尝试则会成功(
    • 可执行文件依赖于一个或多个dylib(独立的运行正常(
    • 可执行文件具有com.apple.identity xattr集
      • 我曾尝试在clean和downloaded之间混合"匹配(即隔离xattr'd文件(,只有当可执行文件被隔离时,问题才会出现;它不在乎一个未隔离的可执行文件是否加载了一个经过验证的dylib
  • 签名操作是通过带有参数"--deep-strict--timestamp--options runtime"的代码签名完成的,然后进行验证
    • 编辑:我已经更新了它,包括一些硬化运行时权限,以修复另一个构建问题,但它对这个问题没有帮助
  • 可执行文件依赖于通过@rpath的dylib(如otool-L所报告的(
    • 编辑:我试过用@executable_path/..替换@rpath/在每种情况下都是lib,但这并没有帮助

还有一个苹果没有添加到文档中的花絮;如果你分发的是一个dylib,而不是一个完整的应用捆绑包,你就不能将公证结果装订在上面。到目前为止,已经有了相关文档,Catalina应该在安装软件时在线验证公证。

但是,经过公证的dylib将在构建机器上被拒绝,除非您将其添加到容器(即zip/dmg(中,删除原始副本,然后在公证被完全接受后再次从zip中提取(即您已收到成功电子邮件(。似乎只有在创建文件时才会检查注释。

您可以始终在XCode中运行它,但不能单独运行,而无需删除和替换二进制文件。

相关内容

  • 没有找到相关文章

最新更新