110 lines
6.5 KiB
Markdown
110 lines
6.5 KiB
Markdown
# 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)**, что обеспечивает полное разделение бизнес-логики, интерфейса и управляющего слоя:
|
||
|
||
```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).
|