- Detailed guide for obtaining code signing certificates - Comparison of EV vs standard Code Signing certificates - Provider pricing: DigiCert, Sectigo, Certum - Instructions for signing .exe with signtool - GitHub Actions automation examples - FAQ: can work without certificate (shows warning but works)
12 KiB
Подпись кода для Windows (Code Signing)
Зачем нужен сертификат?
При установке .exe файла без цифровой подписи Windows показывает предупреждения:
- ⚠️ "Неизвестный издатель"
- ⚠️ "Windows защитила ваш компьютер"
- ⚠️ Windows Defender может блокировать файл
С сертификатом:
- ✅ "Проверенный издатель: Umbrix Team"
- ✅ Нет предупреждений SmartScreen
- ✅ Пользователи доверяют приложению
Текущее состояние (БЕЗ сертификата)
Приложение РАБОТАЕТ, но:
- При установке Windows показывает "Неизвестный издатель"
- Пользователь должен нажать "Все равно запустить"
- Антивирус может блокировать (ложное срабатывание)
Для внутреннего использования это НОРМАЛЬНО ✅
Где получить сертификат?
1. Коммерческие сертификаты (EV Code Signing)
Recommended: Extended Validation (EV) - сразу доверие Windows
| Провайдер | Цена/год | Особенности |
|---|---|---|
| DigiCert | $469-799 | Лучшая репутация, EV на USB токене |
| Sectigo (Comodo) | $399-599 | Популярный, хорошая поддержка |
| GlobalSign | $349-599 | Быстрое получение (1-2 дня) |
| SSL.com | $299-499 | Дешевле, но дольше проверка |
| Certum | €199-399 | Европейский, принимают криптовалюту |
EV сертификат (Extended Validation):
- ✅ Сразу доверие Windows SmartScreen
- ✅ Зелёная подпись "Проверенный издатель"
- ✅ Никаких предупреждений
- 📦 Выдается на USB токене (нельзя скопировать)
- ⏱️ Проверка документов 3-7 дней
Обычный Code Signing (не EV):
- ⚠️ Доверие нарастает со временем (нужно минимум 100-1000 установок)
- ⚠️ Первые месяцы будут предупреждения SmartScreen
- 💾 Файл .pfx/.p12 (можно хранить локально)
- ⏱️ Получение 1-2 дня
2. Требования для получения
Документы:
- Регистрация компании (ИНН, ОГРН, выписка из ЕГРЮЛ)
- ИЛИ ИП (ОГРНИП)
- ИЛИ личность физлица (паспорт, утилиты)
Проверка:
- Подтверждение номера телефона
- Email компании (домен должен совпадать)
- Банковские реквизиты
- Адрес офиса (могут позвонить или прислать письмо с кодом)
3. Процесс получения (DigiCert EV пример)
1. Заказ → 2-3 минуты (онлайн форма)
↓
2. Оплата → $799/год
↓
3. Проверка документов → 3-7 дней
- Загрузка ЕГРЮЛ/паспорта
- Подтверждение телефона
- Проверка адреса
↓
4. Отправка USB токена → 1-5 дней (DHL/FedEx)
↓
5. Установка драйверов → 10 минут
↓
6. Готово! Можно подписывать код
Как подписать файл после получения сертификата
С EV сертификатом (USB токен)
# 1. Установить Windows SDK (включает signtool.exe)
# Скачать: https://developer.microsoft.com/windows/downloads/windows-sdk/
# 2. Подключить USB токен
# 3. Подписать EXE
$signtool = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe"
& $signtool sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /a "umbrix-1.7.3-windows-setup.exe"
# Результат:
# Successfully signed: umbrix-1.7.3-windows-setup.exe
С обычным Code Signing (.pfx файл)
# 1. Экспортировать сертификат в .pfx с паролем
# 2. Подписать EXE
$signtool = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe"
& $signtool sign /f "umbrix-cert.pfx" /p "PASSWORD" /tr http://timestamp.digicert.com /td sha256 /fd sha256 "umbrix-1.7.3-windows-setup.exe"
Проверка подписи
# Посмотреть информацию о подписи
$signtool verify /pa /v "umbrix-1.7.3-windows-setup.exe"
# Или через GUI: ПКМ → Свойства → Цифровые подписи
Автоматизация с GitHub Actions
name: Build & Sign Windows
on:
push:
tags: ['v*']
jobs:
build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.24.0'
- name: Build Windows
run: flutter build windows --release
- name: Build Installer
run: iscc windows/installer.iss
# Для EV сертификата - использовать self-hosted runner с USB токеном
# Для обычного - загрузить .pfx в GitHub Secrets
- name: Sign EXE
env:
CERT_PASSWORD: ${{ secrets.CERT_PASSWORD }}
run: |
# Импорт .pfx из секрета
$cert = [Convert]::FromBase64String("${{ secrets.CERT_BASE64 }}")
[IO.File]::WriteAllBytes("cert.pfx", $cert)
# Подпись
$signtool = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe"
& $signtool sign /f cert.pfx /p $env:CERT_PASSWORD /tr http://timestamp.digicert.com /td sha256 /fd sha256 dist/umbrix-1.7.3-windows-setup.exe
# Удалить временный .pfx
Remove-Item cert.pfx
- name: Upload to Gitea
run: |
curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/assets" `
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" `
--data-binary "@dist/umbrix-1.7.3-windows-setup.exe"
Альтернативы (НЕ рекомендуется)
1. Self-Signed сертификат (для тестирования)
# Создать self-signed сертификат
$cert = New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=Umbrix Team" -CertStoreLocation Cert:\CurrentUser\My
# Экспортировать
$pwd = ConvertTo-SecureString -String "password123" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath umbrix-selfsigned.pfx -Password $pwd
# Подписать
signtool sign /f umbrix-selfsigned.pfx /p password123 /fd sha256 umbrix-1.7.3.exe
⚠️ Проблемы:
- Windows все равно показывает предупреждение
- Нужно вручную добавлять сертификат в доверенные
- НЕ работает на других компьютерах
- Только для внутреннего тестирования
2. Open Source Certificate (StartSSL, Let's Encrypt)
❌ Не работает для Code Signing!
- Let's Encrypt выдает только SSL/TLS (для HTTPS)
- Code Signing требует проверку юрлица
- Нет бесплатных Code Signing сертификатов
3. Использование osslsigncode (Linux подпись Windows файлов)
# Установка на Linux
sudo apt install osslsigncode
# Подпись (с .pfx сертификатом)
osslsigncode sign \
-pkcs12 umbrix-cert.pfx \
-pass "PASSWORD" \
-ts http://timestamp.digicert.com \
-in umbrix-1.7.3-windows-setup.exe \
-out umbrix-1.7.3-windows-setup-signed.exe
Рекомендации для Umbrix
Для разработки и тестирования (СЕЙЧАС):
✅ Без сертификата - просто предупреждение Windows
- Пользователи могут нажать "Все равно запустить"
- Работает для внутреннего использования
- Бесплатно
Для публичного релиза (БУДУЩЕЕ):
✅ DigiCert EV Code Signing ($799/год)
- Сразу доверие Windows
- Нет предупреждений
- Профессиональный вид
- Рекомендуется для коммерческого продукта
Для малого бюджета:
✅ Certum Open Source Code Signing (€199/год)
- Дешевле других
- Принимают криптовалюту
- Специальная цена для Open Source проектов
- Требуют ссылку на GitHub/GitLab
Ссылки
Покупка сертификатов:
- DigiCert: https://www.digicert.com/signing/code-signing-certificates
- Sectigo: https://sectigo.com/ssl-certificates-tls/code-signing
- GlobalSign: https://www.globalsign.com/en/code-signing-certificate
- SSL.com: https://www.ssl.com/certificates/code-signing/
- Certum: https://en.sklep.certum.pl/data-safety/code-signing-certificates/
Документация:
- Microsoft Code Signing: https://learn.microsoft.com/windows/win32/seccrypto/cryptography-tools
- signtool.exe: https://learn.microsoft.com/windows-hardware/drivers/devtest/signtool
Проверка репутации SmartScreen:
FAQ
Q: Можно ли работать без сертификата?
A: Да! Приложение будет работать, но Windows покажет предупреждение "Неизвестный издатель". Для личного/внутреннего использования это OK.
Q: Как быстро получить доверие SmartScreen с обычным сертификатом?
A: Нужно минимум 100-1000 установок за 2-3 месяца. EV сертификат дает доверие сразу.
Q: Можно ли использовать сертификат на Linux для подписи Windows файлов?
A: Да, через osslsigncode. Но EV сертификаты на USB токене работают только на Windows.
Q: Что дешевле - EV или обычный Code Signing?
A: Обычный дешевле ($299 vs $799), но нужно ждать наработки репутации. EV дороже, но доверие сразу.
Q: Сертификат для Umbrix - обязателен?
A: Для закрытого тестирования - НЕТ. Для публичного релиза - ОЧЕНЬ ЖЕЛАТЕЛЬНО.
Итого
Текущая конфигурация обновлений:
- ✅ Файл:
.exeустановщик (Inno Setup) - ✅ Приоритет поиска: x64 → amd64 → win64 → setup → installer → любой .exe
- ✅ Установка: PowerShell с
/VERYSILENT /SUPPRESSMSGBOXES /NORESTART - ✅ Автоперезагрузка: через 2 секунды
- ⚠️ Сертификат: НЕТ (показывает предупреждение, но работает)
Следующие шаги:
- Собрать Windows версию на машине с Windows
- Создать Inno Setup установщик
- Загрузить в Gitea релиз
- Протестировать автообновление
- (Опционально) Купить сертификат для публичного релиза