Code Signing Manager
Графическое приложение (GUI) на Python/PyQt6 для автоматизации создания собственной инфраструктуры открытых ключей (Internal CA) и цифровой подписи исполняемых файлов (.exe, .dll, .msi) под Windows.
Приложение разработано для использования коммерческими организациями (ООО/ИП) для подписи собственного ПО без зависимости от зарубежных Центров Сертификации (CA).
📌 Основные возможности
- Генерация Root CA: Создание автономного Корневого сертификата компании с защитой алгоритмом SHA-256 (ключ 4096-bit) и сроком действия до 30 лет.
- Экспорт Root CA (
.crt): Экспорт публичного сертификата для распространения среди системных администраторов и клиентов для добавления в «Доверенные корневые центры сертификации». - Выпуск Code Signing сертификатов: Автоматическое подписание подчиненного сертификата подписи кода (2048-bit) с помощью созданного Root CA.
- Экспорт PFX: Безопасный экспорт сертификата подписи и закрытого ключа в защищенный паролем
.pfxконтейнер. - Цифровая подпись
.exe: Встроенная обертка надsigntool.exeс поддержкой сервера точного штампа времени (Timestamping SHA-256). - Проверка подписи: Быстрая валидация имеющейся цифровой подписи бинарного файла напрямую из интерфейса.
🏗 Архитектура проекта (MVC)
Проект спроектирован с соблюдением паттерна Model-View-Controller (MVC), что обеспечивает полное разделение бизнес-логики, интерфейса и управляющего слоя:
CodeSigningManager/
├── src/
│ ├── __init__.py
│ ├── model.py # Бизнес-логика (PowerShell API, вызовы signtool)
│ ├── view.py # Графический интерфейс на PyQt6
│ └── controller.py # Связующий слой (обработка событий UI)
├── main.py # Точка входа в приложение
├── app_icon.ico # Иконка приложения
├── version.txt # Метаданные сборки (Windows File Properties)
├── .gitignore # Исключения временных файлов и сертификатов
└── README.md
🚀 Быстрый старт
Требования
- ОС: Windows 10 / 11 / Windows Server
- Python: Версия 3.10 или выше
- Windows SDK (опционально, для утилиты
signtool.exe). Если SDK не установлен, достаточно положитьsigntool.exeв корень проекта.
Установка и запуск
-
Клонируйте репозиторий:
git clone https://github.com/your-username/CodeSigningManager.git cd CodeSigningManager -
Создайте и активируйте виртуальное окружение:
python -m venv venv --without-pip .\venv\Scripts\Activate.ps1 python -m ensurepip --upgrade -
Установите зависимости:
pip install PyQt6 pyinstaller -
Запустите приложение:
python main.py
📦 Сборка автономного .exe
Для упаковки приложения в один независимый исполняемый файл без консольного окна используется PyInstaller:
pyinstaller --noconfirm --onefile --windowed --icon="app_icon.ico" --add-data "app_icon.ico;." --version-file="version.txt" --name "CodeSigningManager" main.py
Готовый монолитный файл будет находиться в директории dist/CodeSigningManager.exe.
📖 Порядок работы с программой
- Шаг 1 (Вкладка «1. Root CA»): Заполните реквизиты вашей компании, нажмите Сгенерировать Root CA, а затем экспортируйте
.crtфайл. - Шаг 2 (Установка Root CA у клиентов): Передайте файл
Company_RootCA.crtклиенту или установите его в домене через Групповые Политики (GPO) в контейнер «Доверенные корневые центры сертификации». - Шаг 3 (Вкладка «2. Сертификат подписи»): Выпустите рабочий сертификат подписи кода и экспортируйте ключ в
.pfxс надежным паролем. - Шаг 4 (Вкладка «3. Подпись .exe»): Выберите целевой
.exeфайл, ваш.pfxключ, введите пароль и нажмите Подписать EXE.
🔒 Безопасность
- Файлы ключей (
.pfx), сертификаты (.crt,.key) и папки сборок автоматически внесены в.gitignore. - Никогда не публикуйте
.pfxфайлы и приватные ключи в открытых репозиториях!
📄 Лицензия
Распространяется под лицензией GNU GENERAL PUBLIC LICENSE. Подробности в файле LICENSE.