代码签名

macOS 系统能通过代码签名检测对app的任何修改,包括意外修改和来自恶意代码的修改。

在Windows系统中,如果程序没有代码签名证书,或者代码签名授信级别较低时,系统同样会将其列为可信程序,只是当用户运行该应用时,系统会显示安全提示。 信任级别随着时间的推移构建,因此最好尽早开始代码签名。

即使开发者可以发布一个未签名的应用程序,但是我们并不建议这样做。 默认情况下,Windows 和 macOS 都会禁止未签名的应用的下载或运行。 从 macOS Catalina (10.15版本) 开始,用户需要操作很多个步骤来运行一个未签名的应用。

macOS Catalina Gatekeeper 将直接警告:无法打开应用程序,因为开发者无法验证../images/gatekeeper.png)

如你所见,用户有两个选择:直接删除应用或者取消运行。 你不会想让用户看见该对话框。

如果你正在开发一款Electron应用,并打算将其打包发布,那你就应该为其添加代码签名。

签名 & 认证 macOS 版本

正确准备 macOS 应用程序的发布需要两个步骤:首先,应用程序需要签名。 然后,应用程序需要上传到苹果,然后才能进行名为“公证”的过程, 自动化系统将会进一步验证您的应用没有做任何事情来危及其用户。

若要开始,请确保你满足签名要求并认证你的应用:

  1. 加入 Apple Developer Program(需要缴纳年费)
  2. 下载并安装 - 这需要一台运行 macOS 的计算机。
  3. 生成,下载,然后安装签名证书(signing certificates)

如果你正在使用 Electron 最受欢迎的构建工具,创建你的应用程序签名 并经过公证仅需要对配置进行一些添加即可。 是官方的 Electron 工具的 集合,在hood下使用 electron-packager electron-notarize

让我们来看看所有必需字段的示例配置。 并不是所有都是必需的:工具非常聪明足以自动找到合适的 identity, 例如,但我们建议你明白无误。

此处引用的 plist 文件需要以下的 macOS 特定权限来保证您的应用正在做这些事情的苹果安全机制并不意味着任何伤害:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3. <plist version="1.0">
  4. <key>com.apple.security.cs.allow-jit</key>
  5. <key>com.apple.security.cs.debugger</key>
  6. <true/>
  7. </dict>
  8. </plist>

请注意,直到Electron 12, com.apple.security.cs.allow-unsigned-executable-memory 的权限都是必需的。 但是,如果可以避免,则不应再使用它。

要查看所有这些都在操作中,请查看 Electron Fiddle 的源代码,。

如果您打算在应用中使用 Electron 的 API 访问麦克风或摄像头,您还需要添加以下权限:

当你调用应用权限中没有的东西时, 比如:

  1. const { systemPreferences } = require('electron')
  2. const microphone = systemPreferences.askForMediaAccess('microphone')

您的应用可能会崩溃。 在 Hardened Runtime 中查看资源访问部分以获取更多信息和您可能需要的权限。

如果你没有使用集成的构建工具比如 Forge 或 Builder, 你更倾向于使用 的话,可用的有 electron-osx-sign 和 .

如果您正在使用Packager的 API,您可以通过配置 来签名并对您的应用程序进行公证

此处引用的 文件需要以下的 macOS 特定权限来保证您的应用正在做这些事情的苹果安全机制并不意味着任何伤害:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3. <plist version="1.0">
  4. <dict>
  5. <true/>
  6. <key>com.apple.security.cs.debugger</key>
  7. <true/>
  8. </dict>
  9. </plist>

请注意,直到Electron 12, 的权限都是必需的。 但是,如果可以避免,则不应再使用它。

详见 .

签署windows应用程序

在签署Windows应用程序前,你需要完成以下事项:

  1. 获取一个 Windows 身份验证码签名证书 (需要年度费用)
  2. 安装 Visual Studio 以获取签名工具 (免费 已足够)

您可以从许多经销商获得代码签名证书。 价格各异,所以值得你花点时间去货比三家。 常见经销商包括:

  • digicert
  • 除其他外,请货比三家后选择适合你的那一款,Google 是您的朋友😄:

你可以运用许多方式来签署你的应用:

  • electron-winstaller 将生成一个窗口安装程序并为你签名
  • 可以为通过 Squirrel.Windows 或 MSI 方式生成的安装包生成签名
  • electron-builder 可以为某些 windows 平台产品生成签名