Files
CodeSigningManager/README.md

110 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).