# Code Signing Manager ![Python](https://img.shields.io/badge/Python-3.10%2B-blue?style=flat&logo=python&logoColor=white) ![PyQt6](https://img.shields.io/badge/PyQt6-6.0%2B-green?style=flat&logo=qt&logoColor=white) ![Architecture](https://img.shields.io/badge/Architecture-MVC-orange?style=flat) ![License](https://img.shields.io/badge/License-GPL-yellow?style=flat) Графическое приложение (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)**, что обеспечивает полное разделение бизнес-логики, интерфейса и управляющего слоя: ```ext 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` в корень проекта. ### Установка и запуск 1. **Клонируйте репозиторий:** ```bash git clone https://github.com/your-username/CodeSigningManager.git cd CodeSigningManager ``` 2. **Создайте и активируйте виртуальное окружение:** ```powershell python -m venv venv --without-pip .\venv\Scripts\Activate.ps1 python -m ensurepip --upgrade ``` 3. **Установите зависимости:** ```bash pip install PyQt6 pyinstaller ``` 4. **Запустите приложение:** ```bash python main.py ``` --- ## 📦 Сборка автономного `.exe` Для упаковки приложения в один независимый исполняемый файл без консольного окна используется **PyInstaller**: ```powershell 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 (Вкладка «1. Root CA»)**: Заполните реквизиты вашей компании, нажмите **Сгенерировать Root CA**, а затем экспортируйте `.crt` файл. 2. **Шаг 2 (Установка Root CA у клиентов)**: Передайте файл `Company_RootCA.crt` клиенту или установите его в домене через Групповые Политики (GPO) в контейнер *«Доверенные корневые центры сертификации»*. 3. **Шаг 3 (Вкладка «2. Сертификат подписи»)**: Выпустите рабочий сертификат подписи кода и экспортируйте ключ в `.pfx` с надежным паролем. 4. **Шаг 4 (Вкладка «3. Подпись .exe»)**: Выберите целевой `.exe` файл, ваш `.pfx` ключ, введите пароль и нажмите **Подписать EXE**. --- ## 🔒 Безопасность * Файлы ключей (`.pfx`), сертификаты (`.crt`, `.key`) и папки сборок автоматически внесены в `.gitignore`. * **Никогда не публикуйте `.pfx` файлы и приватные ключи в открытых репозиториях!** --- ## 📄 Лицензия Распространяется под лицензией GNU GENERAL PUBLIC LICENSE. Подробности в файле [LICENSE](LICENSE).