6.2 KiB
Локальная инфраструктура сертификатов (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. Создайте их на основе шаблонов (команда безопасно пропустит копирование, если файлы уже созданы и настроены):
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
🚀 Порядок запуска и использования
Перед запуском сделайте скрипты исполняемыми:
chmod +x build-root-cert.sh build-intermediate-cert.sh build-issuing-cert.sh
Шаг 1. Создание Корневого ЦС
Запустите скрипт создания главного сертификата. Если файлы уже существуют, скрипт выведет предупреждение для предотвращения случайной перезаписи.
./build-root-cert.sh
- Скрипт интерактивно спросит, хотите ли вы установить корневой сертификат в системное хранилище доверенных сертификатов ОС (Debian/Ubuntu). В случае согласия он сам запросит права
sudoв нужный момент.
Шаг 2. Создание Промежуточного ЦС
Запустите скрипт создания промежуточного центра, который будет использоваться непосредственно для подписи конечных адресов. Он защищен флагами ограничения области видимости доменов (nameConstraints) и запретом создания цепочек ниже уровнем (pathlen:0).
./build-intermediate-cert.sh
Шаг 3. Выпуск мультидоменного сертификата
Запустите скрипт генерации универсального сертификата. Он подпишет ключ, строго опираясь на правила и список альтернативных имен (DNS и IP) из файла issuing_san.ini.
./build-issuing-cert.sh
- В конце процесса скрипт предложит автоматически собрать универсальные PEM-контейнеры
privkey.pem(приватный ключ) иfullchain.pem(полная цепочка сертификатов), которые готовы к копированию в Nginx, Nginx Proxy Manager, Apache или бэкенд-приложения.
🛡️ Безопасность
- Конфиденциальность ключей: Приватные файлы ключей (
*.keyиprivkey.pem) дают полный контроль над вашей локальной безопасностью. Никогда не передавайте их третьим лицам и ограничьте к ним доступ на машине (chmod 400). - Игнорирование в Git: Обязательно добавьте секретные файлы в
.gitignore, чтобы случайно не отправить личные ключи и доступы в публичный репозиторий.