# Локальная инфраструктура сертификатов (Local PKI) Набор bash-скриптов и конфигурационных файлов для автоматического создания собственного доверенного центра сертификации (Root CA), промежуточного центра (Intermediate CA) и выпуска универсальных мультидоменных SSL-сертификатов (для Nginx, Nginx Proxy Manager, Docker-сервисов и любых других веб-серверов). --- ## 📋 Описание полей сертификата (Subject) При настройке метаданных сертификатов в файле конфигурации используются следующие стандартные атрибуты: * **CN** (*Common Name*) — Имя создаваемого объекта. Для Root/Intermediate CA указывается понятное название центра (например, `Ixrs Root CA`), а для конечных сертификатов — базовый домен организации. * **O** (*Organization*) — Название компании или организации (например, `Ixrs`). * **L** (*Locality*) — Город, населенный пункт или описание сети (например, `Local Network`). * **C** (*Country*) — Двухбуквенный код страны в формате ISO (например, `RU`, `EU`, `US`). * **ST** (*State*) — Регион, область, штат или край. * **emailAddress** — Электронная почта администратора для связи. --- ## 📂 Структура проекта * `build-root-cert.sh` — Скрипт генерации Корневого ЦС (Root CA). * `build-intermediate-cert.sh` — Скрипт генерации Промежуточного ЦС (Intermediate CA). * `build-issuing-cert.sh` — Скрипт выпуска конечного мультидоменного сертификата. * `.env.example` — Шаблон с примерами переменных окружения. * `root_ca.ini` — Конфигурация OpenSSL для корневого сертификата (`v3_ca`). * `intermediate_ca.ini` — Конфигурация OpenSSL для промежуточного сертификата с защитой `nameConstraints` и `pathlen`. * `issuing_san.ini` — Конфигурация SAN (Subject Alternative Names) со списком всех ваших локальных доменов, поддоменов, localhost и IP-адресов. --- ## ⚙️ Настройка окружения Для конфигурации скриптов используются файлы `.env` и `.ini`. Создайте их на основе шаблонов (команда безопасно пропустит копирование, если файлы уже созданы и настроены): ```bash cp -n .env.example .env cp -n root_ca.ini.example root_ca.ini cp -n intermediate_ca.ini.example intermediate_ca.ini cp -n issuing_san.ini.example issuing_san.ini ``` --- ## 🚀 Порядок запуска и использования Перед запуском сделайте скрипты исполняемыми: ```bash chmod +x build-root-cert.sh build-intermediate-cert.sh build-issuing-cert.sh ``` ### Шаг 1. Создание Корневого ЦС Запустите скрипт создания главного сертификата. Если файлы уже существуют, скрипт выведет предупреждение для предотвращения случайной перезаписи. ```bash ./build-root-cert.sh ``` * Скрипт интерактивно спросит, хотите ли вы установить корневой сертификат в системное хранилище доверенных сертификатов ОС (Debian/Ubuntu). В случае согласия он сам запросит права `sudo` в нужный момент. ### Шаг 2. Создание Промежуточного ЦС Запустите скрипт создания промежуточного центра, который будет использоваться непосредственно для подписи конечных адресов. Он защищен флагами ограничения области видимости доменов (`nameConstraints`) и запретом создания цепочек ниже уровнем (`pathlen:0`). ```bash ./build-intermediate-cert.sh ``` ### Шаг 3. Выпуск мультидоменного сертификата Запустите скрипт генерации универсального сертификата. Он подпишет ключ, строго опираясь на правила и список альтернативных имен (DNS и IP) из файла `issuing_san.ini`. ```bash ./build-issuing-cert.sh ``` * В конце процесса скрипт предложит автоматически собрать универсальные PEM-контейнеры `privkey.pem` (приватный ключ) и `fullchain.pem` (полная цепочка сертификатов), которые готовы к копированию в Nginx, Nginx Proxy Manager, Apache или бэкенд-приложения. --- ## 🛡️ Безопасность * **Конфиденциальность ключей:** Приватные файлы ключей (`*.key` и `privkey.pem`) дают полный контроль над вашей локальной безопасностью. Никогда не передавайте их третьим лицам и ограничьте к ним доступ на машине (`chmod 400`). * **Игнорирование в Git:** Обязательно добавьте секретные файлы в `.gitignore`, чтобы случайно не отправить личные ключи и доступы в публичный репозиторий.