# Code Signing Manager [![Python Version](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/) [![UI Framework](https://img.shields.io/badge/GUI-PyQt6-green.svg)](https://www.riverbankcomputing.com/software/pyqt/) [![Architecture](https://img.shields.io/badge/Architecture-MVC-orange.svg)]() [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) Графическое приложение (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).