Electron 代碼簽名

2023-02-16 17:16 更新

代碼簽名是一種用來(lái)證明應(yīng)用是由你創(chuàng)建的一種安全技術(shù)。 您應(yīng)該對(duì)應(yīng)用程序進(jìn)行簽名,以便它不會(huì)觸發(fā)任何 操作系統(tǒng)安全檢查。

在 macOS 上,系統(tǒng)可以檢測(cè)對(duì)應(yīng)用的任何更改,無(wú)論更改是 意外引入還是由惡意代碼引入。

在Windows系統(tǒng)中,如果程序沒(méi)有代碼簽名證書,或者代碼簽名授信級(jí)別較低時(shí),系統(tǒng)同樣會(huì)將其列為可信程序,只是當(dāng)用戶運(yùn)行該應(yīng)用時(shí),系統(tǒng)會(huì)顯示安全提示。 信任級(jí)別隨著時(shí)間的推移構(gòu)建,因此最好盡早開(kāi)始代碼簽名。

即使開(kāi)發(fā)者可以發(fā)布一個(gè)未簽名的應(yīng)用程序,但是我們并不建議這樣做。 默認(rèn)情況下,Windows 和 macOS 都會(huì)禁止未簽名的應(yīng)用的下載或運(yùn)行。 從 macOS Catalina (10.15版本) 開(kāi)始,用戶需要操作很多個(gè)步驟來(lái)運(yùn)行一個(gè)未簽名的應(yīng)用。


如你所見(jiàn),用戶有兩個(gè)選擇:直接刪除應(yīng)用或者取消運(yùn)行。 你不會(huì)想讓用戶看見(jiàn)該對(duì)話框。

如果你正在開(kāi)發(fā)一款Electron應(yīng)用,并打算將其打包發(fā)布,那你就應(yīng)該為其添加代碼簽名。

簽名 & 認(rèn)證 macOS 版本

正確準(zhǔn)備即將發(fā)布的 macOS 應(yīng)用程序需要完成兩個(gè)步驟。 首先, 應(yīng)用需要進(jìn)行代碼簽名。 然后,需要將該應(yīng)用程序上傳到Apple以進(jìn)行稱為 公證 的過(guò)程,其中自動(dòng)化系統(tǒng)將進(jìn)一步驗(yàn)證 您的應(yīng)用程序是否未采取任何危害其用戶的行為。

若要開(kāi)始,請(qǐng)確保你滿足簽名要求并認(rèn)證你的應(yīng)用:

  1. 加入 Apple Developer Program(需要繳納年費(fèi))
  2. 下載并安裝 Xcode - 這需要一臺(tái)運(yùn)行 macOS 的計(jì)算機(jī)。
  3. 生成,下載,然后安裝簽名證書(signing certificates)

Electron 的生態(tài)系統(tǒng)有利于配置和自由,所以有多種方法讓您的應(yīng)用程序簽名和公證。

使用 Electron Forge

如果你正在使用 Electron 最受歡迎的構(gòu)建工具,創(chuàng)建你的應(yīng)用程序簽名 并經(jīng)過(guò)公證僅需要對(duì)配置進(jìn)行一些添加即可。 Forge 是官方的 Electron 工具的 集合,在hood下使用 electron-packager  @electron/osx-sign  @electron/notarize 。

請(qǐng)參見(jiàn) Electron Forge 文檔中的 簽署 macOS 應(yīng)用程序 指南了解如何配置應(yīng)用程序詳細(xì)說(shuō)明。

使用 Electron Packager

如果你沒(méi)有使用像 Forge 這樣的集成構(gòu)建流,你可能會(huì)使用 electron-packager,其中包括 @electron/osx-sign 和  @electron/notarize

如果您正在使用 Packager 的 API,您可以通過(guò)配置 來(lái)簽名并對(duì)您的應(yīng)用程序進(jìn)行公證

const packager = require('electron-packager')

packager({
  dir: '/path/to/my/app',
  osxSign: {},
  osxNotarize: {
    appleId: 'felix@felix.fun',
    appleIdPassword: 'my-apple-id-password'
  }
})

對(duì) Mac 應(yīng)用商店應(yīng)用程序進(jìn)行簽名?

詳見(jiàn) Mac App Store 應(yīng)用程序提交指南。

簽署windows應(yīng)用程序?

在簽署Windows應(yīng)用程序前,你需要完成以下事項(xiàng):

  1. 獲取一個(gè) Windows 身份驗(yàn)證碼簽名證書 (需要年度費(fèi)用)
  2. 安裝 Visual Studio 以獲取簽名工具 (免費(fèi) 社區(qū)版 已足夠)

您可以從許多經(jīng)銷商獲得代碼簽名證書。 價(jià)格各異,所以值得你花點(diǎn)時(shí)間去貨比三家。 常見(jiàn)經(jīng)銷商包括:

  • digicert
  • Sectigo
  • 也可以根據(jù)自身需求,選擇其它的簽名分銷商。 ??

妥善保存您的證書密碼

您的證書密碼應(yīng)該被妥善保存。 不要公開(kāi)分享,或者提交到您的開(kāi)源代碼中。

使用 Electron Forge

Electron Forge 是簽署 Squirrel.Windows 和 WiX MSI 安裝程序的推薦方式。 Electron Forge 代碼簽名教程 中提供了有關(guān)如何配置應(yīng)用程序的詳細(xì)說(shuō)明。

使用 electron-winstaller (Squirrel.Windows)

electron-winstaller 可以為您的 Electron 程序創(chuàng)建 Squirrel.Windows 安裝器。 這也是 Electron Forge 的 Squirrel.Windows Maker 底層在使用的工具。 如果您不使用 Electron Forge 并想直接使用 electron-winstaller ,請(qǐng)通過(guò) certificateFile 和 certificatePassword 配置選項(xiàng)。

const electronInstaller = require('electron-winstaller')
// NB: Use this syntax within an async function, Node does not have support for
//     top-level await as of Node 12.
try {
  await electronInstaller.createWindowsInstaller({
    appDirectory: '/tmp/build/my-app-64',
    outputDirectory: '/tmp/build/installer64',
    authors: 'My App Inc.',
    exe: 'myapp.exe',
    certificateFile: './cert.pfx',
    certificatePassword: 'this-is-a-secret',
  })
  console.log('It worked!')
} catch (e) {
  console.log(`No dice: ${e.message}`)
}

有關(guān)完整配置選項(xiàng),請(qǐng)查看 electron-winstaller 庫(kù)!

使用 electron-wix-msi (WiX MSI)

electron-wix-msi 是一個(gè)可以為您的 Electron 應(yīng)用程序生成 MSI 安裝程序的庫(kù)。 這是 Electron Forge 的 MSI Maker 底層使用的工具。

如果您沒(méi)有使用 Electron Forge,并且想要直接使用 electron-wix-msi ,請(qǐng)使用 certificateFile 和 certificatePassword 配置選項(xiàng) 或?qū)?shù)直接傳遞到 SignTool.exe 并帶有 signWithParams 選項(xiàng)。

import { MSICreator } from 'electron-wix-msi'

// 步驟1:實(shí)例化MSICreator
const msiCreator = new MSICreator({
  appDirectory: '/path/to/built/app',
  description: 'My amazing Kitten simulator',
  exe: 'kittens',
  name: 'Kittens',
  manufacturer: 'Kitten Technologies',
  version: '1.1.2',
  outputDirectory: '/path/to/output/folder',
  certificateFile: './cert.pfx',
  certificatePassword: 'this-is-a-secret',
})

// Step 2: 創(chuàng)建一個(gè) .wxs 模板文件
const supportBinaries = await msiCreator.create()
// ?? 步驟 2a: 如果可以選擇對(duì)支持二進(jìn)制文件進(jìn)行簽名 
// 將二進(jìn)制文件作為打包腳本的一部分進(jìn)行簽名
supportBinaries.forEach(async (binary) => {
  // 二進(jìn)制文件是新的存根可執(zhí)行文件,可以選擇
  // Squirrel 自動(dòng)更新程序。
  await signFile(binary)
})

// 步驟 3:將模板編譯為.msi文件
await msiCreator.compile()

如需完整的配置選項(xiàng),請(qǐng)查看 electron-wix-msi 存儲(chǔ)庫(kù)!

使用 Electron Builder

Electron Builder 附帶一個(gè)自定義解決方案,用于簽署應(yīng)用程序。 你可以在這里找到 它的文檔

對(duì) Windows 應(yīng)用商店應(yīng)用程序進(jìn)行簽名

參考 Windows 商店指南


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)