Files
cert/README.md
T
2026-10-01 01:44:10 +03:00

8.0 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 — Электронная почта администратора для связи.

📂 Структура проекта и генерируемые файлы

После успешного выполнения всех скриптов структура директории будет выглядеть следующим образом:

.
├── .env                          # Активный файл конфигурации (копия из .env.example)
│
├── root_ca.ini                   # Конфигурация OpenSSL для Root CA
├── intermediate_ca.ini           # Конфигурация OpenSSL для Intermediate CA
├── issuing_san.ini               # Список доменов, поддоменов и IP для конечного сертификата
│
├── build-root-cert.sh            # Скрипт сборки Root CA
├── build-intermediate-cert.sh    # Скрипт сборки Intermediate CA
├── build-issuing-cert.sh         # Скрипт сборки универсального мультидоменного сертификата
│
# ── Сгенерированные файлы (Артефакты) ──────────────────────────────────────────
│
├── root_ca.key                   # [🔒 SECRET] Приватный ключ Корневого ЦС
├── root_ca.crt                   # Публичный сертификат Корневого ЦС
├── root_ca.srl                   # Файл серийных номеров для отслеживания Root CA
│
├── intermediate_ca.key           # [🔒 SECRET] Приватный ключ Промежуточного ЦС
├── intermediate_ca.csr           # Запрос на подпись (CSR) Промежуточного ЦС
├── intermediate_ca.crt           # Публичный сертификат Промежуточного ЦС
├── intermediate_ca.srl           # Файл серийных номеров для отслеживания Intermediate CA
│
├── issuing.key                   # [🔒 SECRET] Исходный приватный ключ доменов
├── issuing.csr                   # Запрос на подпись (CSR) для конечных доменов
├── issuing.crt                   # Исходный конечный сертификат (только домены)
│
# ── Готовые контейнеры для веб-серверов (Nginx / NPM / Apache) ─────────────────
│
├── privkey.pem                   # [🔒 SECRET] Универсальный приватный ключ для веб-сервера
└── fullchain.pem                 # Полная цепочка (Конечный серт + Промежуточный серт)

⚙️ Настройка окружения

Для конфигурации скриптов используются файлы .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, чтобы случайно не отправить личные ключи и доступы в публичный репозиторий.