Так как в планах проекта числится развертывание удостоверяющего центра (УЦ) PKI на базе Red OS, то я заранее решил набросать план действий как будем это разорачивать и какие инструменты использовать. Может кому пригодится.
Предварительная подготовка и планирование
Цели и задачи:
- определить назначение УЦ (внутренняя корпоративная сеть, партнёрские взаимодействия, публичные сервисы);
- обозначить круг пользователей (сотрудники, клиенты, партнёры);
- установить требуемые типы сертификатов (SSL/TLS, подписи кода, электронной подписи, клиентские и т. п.);
- зафиксировать сроки действия сертификатов и политику отзыва.
Нормативно‑правовая база:
- ФЗ‑63 «Об электронной подписи»
- ФЗ‑149 «Об информации, информационных технологиях и о защите информации»
- согласовать порядок работы с внутренними регламентами организации;
Ресурсы и инфраструктура:
- выделить сервер (физический или виртуальный) с Red OS;
- обеспечить резервирование и бэкапы;
- предусмотреть сетевую сегментацию (DMZ для веб‑интерфейса или иного метода управления, изолированная зона для корневого УЦ);
- подготовить хранилище ключей (HSM или защищённое ПО‑хранилище).
2. Выбор ПО и компонентов
Основные варианты:
- OpenSSL — базовый инструмент для генерации ключей и сертификатов;
- Easy‑RSA — упрощённый интерфейс для управления PKI на базе OpenSSL;
- EJBCA — полнофункциональный УЦ с веб‑интерфейсом, поддержкой OCSP, CRL, интеграцией с LDAP;
- XCA — графический инструмент для управления PKI (удобен для небольших развёртываний);
Рекомендация для Red OS:
- начать с OpenSSL + Easy‑RSA для прототипирования;
- для удобства управления инфраструктурой PKI использовать XCA
- для продуктивной эксплуатации — EJBCA (требует Java и СУБД, например PostgreSQL).
3. Установка и настройка Red OS
- Установить Red OS (рекомендуется последняя стабильная версия).
- Обновить систему:
# dnf update -y
- Установить базовые пакеты:
# dnf install openssl openssl-devel java-11-openjdk postgresql-server
- Настроить firewall (открыть порты для HTTP/HTTPS, OCSP, LDAP при необходимости).
- Настроить SELinux (в режиме permissive или с кастомными политиками для УЦ).
Развёртывание PKI (на примере OpenSSL + Easy‑RSA)
Шаг 1. Инициализация PKI
- Установить Easy‑RSA:
# dnf install easy-rsa -y
- Создать директорию для PKI:
# mkdir ~/pki
# cp -r /usr/share/easy-rsa/* ~/pki/
# cd ~/pki
- Инициализировать конфигурацию:
# ./easyrsa init-pki
Шаг 2. Создание корневого сертификата (CA)
- Сгенерировать ключ и сертификат CA:
# ./easyrsa build-ca
(задать пароль и Common Name для CA).
- Сохранить файлы:
pki/ca.crt— корневой сертификат;pki/private/ca.key— закрытый ключ CA (хранить в защищённом месте!).
Шаг 3. Выпуск сертификатов для серверов/клиентов
- Сгенерировать запрос на сертификат (CSR):
# ./easyrsa gen-req server nopass
- Подписать CSR корневым CA:
# ./easyrsa sign-req server server
- Получить сертификат:
pki/issued/server.crt.
Шаг 4. Управление CRL (список отозванных сертификатов)
- Отозвать сертификат:
# ./easyrsa revoke server
- Сгенерировать CRL:
# ./easyrsa gen-crl
(файл pki/crl.pem).
4. Развёртывание PKI (вариант на XCA)
Шаг 1. Установка XCA на Red OS
- Проверить наличие зависимостей
XCA требует Qt и OpenSSL. Убедитесь, что они установлены:#dnf install qt5-qtbase openssl openssl-devel -y - Скачать и установить XCA
- Вариант 1: из репозитория (если доступен):
# dnf install xca -y - Вариант 2: сборка из исходников (актуальная версия):
#git clone https://github.com/lutz-jahnke/xca.git
#cd xca
#make
#make install
- Вариант 1: из репозитория (если доступен):
- Запустить XCA
#xca
Шаг 2. Инициализация базы данных PKI
- Создать новую базу данных
- В XCA: File → New Database.
- Задать пароль шифрования базы (хранить в надёжном месте!).
- Выбрать путь для сохранения файла базы (например,
~/pki/xca.db).
- Настроить параметры по умолчанию
- В Settings → Default Values указать:
- Country, State, Organization (для шаблонов сертификатов).
- Срок действия сертификатов (по умолчанию).
- Алгоритм подписи (например, RSA 2048 бит).
- В Settings → Default Values указать:
Шаг 3. Создание корневого CA
- Сгенерировать ключ CA
- Вкладка Private Keys → New.
- Выбрать алгоритм (RSA/ECDSA), длину ключа.
- Сохранить ключ в базе XCA.
- Создать сертификат CA
- Вкладка Certificates → New.
- Выбрать созданный ключ.
- Заполнить поля:
- Common Name (например, «My Root CA»).
- Validity (срок действия, например 10 лет).
- Basic Constraints → CA: true.
- Key Usage → Certificate Sign, CRL Sign.
- Подписать сертификат самим собой (Self-sign).
- Экспортировать корневой сертификат
- Выбрать сертификат CA в списке.
- Export → Certificate → формат PEM (
ca.crt).
Шаг 4. Выпуск сертификатов для серверов/клиентов
- Сгенерировать ключ и CSR
- Вкладка Private Keys → New (для конечного субъекта).
- Вкладка CSR → New → выбрать ключ, заполнить поля (CN, SAN и т. д.).
- Подписать CSR корневым CA
- Вкладка Certificates → Sign CSR.
- Выбрать CSR из списка, настроить параметры:
- Срок действия.
- Расширения (например, Server Authentication для SSL/TLS).
- Подписать, используя ключ CA.
- Экспортировать сертификат
- Выбрать сертификат в списке → Export → формат PEM (
server.crt).
- Выбрать сертификат в списке → Export → формат PEM (
Шаг 5. Управление CRL
- Сгенерировать CRL
- Вкладка CRL → New.
- Выбрать CA, указать срок действия CRL.
- Нажать Generate.
- Отозвать сертификат
- Выбрать сертификат → Revoke.
- Указать причину (например, Key Compromise).
- Перегенерировать CRL (шаг выше).
- Экспортировать CRL
- Выбрать CRL в списке → Export → формат PEM (
crl.pem).
- Выбрать CRL в списке → Export → формат PEM (
Шаг 6. Экспорт и импорт объектов
- Экспорт ключей/сертификатов:
Right-click на объекте → Export → выбрать формат (PEM, DER, PKCS#12). - Импорт существующих ключей/сертификатов:
File → Import → выбрать файл (PEM, PKCS#12 и т. д.).
Развёртывание EJBCA (альтернативный вариант)
Шаг 1. Установка зависимостей
- Установить Java и PostgreSQL:
# dnf install java-11-openjdk postgresql-server -y
# postgresql-setup --initdb
# systemctl enable postgresql --now
- Создать БД для EJBCA:
CREATE DATABASE ejbca;
CREATE USER ejbca WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE ejbca TO ejbca;
Шаг 2. Развёртывание EJBCA
- Скачать EJBCA с официального сайта.
- Распаковать и настроить
ejbca.properties(указать параметры БД, пути к ключам). - Запустить установку:
# ant bootstrap
# ant deploy
- Открыть веб‑интерфейс (по умолчанию
https://<server>:8443/ejbca).
Шаг 3. Настройка УЦ в EJBCA
- Создать CA (выбрать алгоритм, срок действия, политику).
- Настроить профили сертификатов (шаблоны для разных типов).
- Включить OCSP и CRL distribution points.
- Настроить аутентификацию пользователей (LDAP, локальная БД).
6. Безопасность и защита ключей
- Хранение ключей CA: использовать HSM (например, Рутокен ЭЦП) или зашифрованные контейнеры.
- Резервное копирование: регулярно бэкапить
pki/(для OpenSSL) или БД EJBCA. - Контроль доступа: ограничить доступ к серверу УЦ (SSH с ключами, двухфакторная аутентификация).
- Логирование: настроить аудит действий в PKI (журнал выдачи/отзыва сертификатов).
Интеграция и тестирование
Тестирование сертификатов:
- проверить валидность сертификатов через OpenSSL:
# openssl verify -CAfile ca.crt server.crt
- протестировать SSL/TLS на сервере (например, с помощью
curlили браузеров).
Интеграция с сервисами:
- настроить веб‑серверы (Apache/Nginx) для использования выпущенных сертификатов;
- интегрировать с почтовыми серверами (SMTP/IMAP с TLS);
- настроить VPN (OpenVPN, IPsec) с аутентификацией по сертификатам.
Проверка OCSP/CRL:
- убедиться, что клиенты могут проверять статус сертификатов через OCSP‑ответчик или CRL.
Документирование и поддержка
- Политика PKI: оформить документ с правилами выдачи, отзыва, хранения ключей.
- Инструкции для пользователей: описать процесс запроса и установки сертификатов.
- Мониторинг: настроить оповещения о приближении срока действия сертификатов.
- Обновление: планировать ротацию ключей CA (раз в 3–5 лет).
Масштабирование и развитие
- Подчиненные УЦ (Sub‑CA): для распределения нагрузки и изоляции зон доверия.
- API для автоматизации: использовать REST API EJBCA или CFSSL для интеграции с CI/CD.
- Поддержка стандартов: обеспечить совместимость с X.509, PKCS#12, CMP.
Риски и меры их снижения
- Компрометация CA: хранить ключ CA оффлайн, использовать HSM.
- Ошибки конфигурации: регулярно аудировать настройки PKI.
- Отказ сервисов: предусмотреть резервные копии и план восстановления.




