Подпись кода
Подпись кода — цифровая подпись программы сертификатом разработчика. По ней система проверяет, кто выпустил программу и что её не изменили после выпуска. Неподписанную программу macOS не даст открыть обычным способом, а Windows покажет предупреждение SmartScreen о неизвестном издателе. Это обзорный урок: сами сертификаты покупаются и оформляются вне Electron.
Что даёт подпись
| Система | Без подписи | С подписью |
|---|---|---|
| macOS | Сообщение, что программу нельзя открыть, так как разработчик не проверен | Программа открывается как обычно |
| Windows | Синее окно SmartScreen «Windows защитила ваш компьютер» | Имя издателя в окне установки, со временем без предупреждений |
| Обновления | В macOS автообновление не работает | Работает |
macOS: подпись и нотаризация
Для macOS нужны:
- Участие в Apple Developer Program (платная подписка).
- Сертификат Developer ID Application, установленный в связку ключей Mac.
- Нотаризация — отправка сборки в Apple на автоматическую проверку.
Forge делает оба шага при сборке, если указать настройки:
// forge.config.js
module.exports = {
packagerConfig: {
osxSign: {},
osxNotarize: {
appleId: process.env.APPLE_ID,
appleIdPassword: process.env.APPLE_PASSWORD,
teamId: process.env.APPLE_TEAM_ID,
},
},
};Пустой объект osxSign означает «подписать сертификатом из связки ключей с настройками по умолчанию». appleIdPassword — не обычный пароль, а пароль приложения, созданный в учётной записи Apple. Подписывать и нотаризовать можно только на Mac.
Windows: сертификат Authenticode
Для Windows покупают сертификат подписи кода у удостоверяющего центра или используют облачную подпись, например Azure Trusted Signing. Сертификат в виде файла .pfx указывают мейкеру Squirrel:
// forge.config.js
module.exports = {
makers: [
{
name: '@electron-forge/maker-squirrel',
config: {
certificateFile: './certs/notes.pfx',
certificatePassword: process.env.CERTIFICATE_PASSWORD,
},
},
],
};После npm run make установщик и программа внутри него будут подписаны. Свойства файла Setup.exe в Проводнике покажут вкладку «Цифровые подписи» с именем издателя.
Подпись в CI
При сборке в GitHub Actions сертификат и пароли хранят в секретах репозитория и передают сборке как переменные окружения. Поэтому в конфигурации выше нет ни одного пароля — только process.env.
Частая ошибка
Нельзя записывать пароль сертификата или Apple ID прямо в forge.config.js и добавлять файл .pfx в Git. Любой, кто увидит репозиторий, сможет подписать вашим именем вредоносную программу. Храните секреты в переменных окружения, а папку certs/ добавьте в .gitignore.