当我从浏览器下载经过有效代码签名的应用程序时,它说它已损坏

When I download my validly codesigned app from a browser, it says it's damaged

我有一个 Mac OSX electron 应用程序,我使用 electron-builder 进行签名。我的证书有效,直到 2020 年才会过期。当我构建我的应用程序的 .app 和 .dmg 文件时,我 运行 spctl --assess --verbose MyApp.app/,它说 "accepted"。当我从浏览器下载包含 .app 的 dmg 或 zip 文件并 运行 它时,会出现一个对话框,提示此应用程序已损坏,并提供将其移至垃圾箱的选项。我的应用程序以前发布的版本没有这样的问题,现在抛出这个错误,尽管仍然在本地传递 spctl -acodesign --verify --verbose MyApp.app/ 也说有效。此外,如果我在本地 运行 应用程序,它不会抛出这些错误。

这里发生了什么?

嵌套的应用程序依赖项在签名后以某种方式更改,使签名无效。要检查这一点,您必须 运行 codesign --verify --deep MyApp.app/--deep 标志通过嵌套依赖项递归并验证它们。

从 Internet 下载应用程序会触发 Gatekeeper 安全检查的原因,否则不会发生。对于使用 electron-builder 的 electron 应用程序,已添加深度代码签名验证,请在此处查看详细信息:https://github.com/electron-userland/electron-osx-sign/issues/42