107 lines
8.3 KiB
Markdown
107 lines
8.3 KiB
Markdown
# Локальная инфраструктура сертификатов (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** — Электронная почта администратора для связи.
|
|
|
|
---
|
|
|
|
## 📂 Структура проекта и генерируемые файлы
|
|
|
|
После успешного выполнения всех скриптов структура директории будет выглядеть следующим образом:
|
|
|
|
```text
|
|
.
|
|
├── .env # Активный файл конфигурации (копия из .env.example)
|
|
├── .env.example # Шаблон конфигурации для окружения
|
|
├── .gitignore # Исключения для Git (блокирует отправку ключей)
|
|
│
|
|
├── 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`. Создайте их на основе шаблонов (команда безопасно пропустит копирование, если файлы уже созданы и настроены):
|
|
|
|
```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`, чтобы случайно не отправить личные ключи и доступы в публичный репозиторий.
|