Основы PKI: создаём Root CA и Intermediate CA на OpenSSL
1. Введение
Прежде чем использовать готовые решения для автоматической выдачи сертификатов, полезно понять, как устроена инфраструктура открытых ключей (PKI) и из каких компонентов состоит современный центр сертификации.
В большинстве организаций сертификаты выпускаются не напрямую корневым центром сертификации, а через промежуточные центры сертификации (Intermediate CA). Такой подход позволяет повысить безопасность и упростить управление инфраструктурой.
В этой статье мы вручную создадим собственный Root CA и Intermediate CA с помощью OpenSSL, разберём назначение каждого компонента и посмотрим, как формируется цепочка доверия сертификатов.
Полученная инфраструктура позволит лучше понять принципы работы центров сертификации и станет хорошей основой для дальнейшего изучения PKI.
Важно
Сертификат будет считаться доверенным только на устройствах, где установлен сертификат Root CA. Для браузеров и устройств из Интернета такой сертификат останется недоверенным до тех пор, пока корневой сертификат не будет импортирован вручную.
2. Подготовка системы
В качестве сервера центра сертификации будем использовать Debian 12 или Debian 13.
Перед началом работы обновим систему и установим необходимые утилиты:
apt update && apt upgrade -y
apt install -y openssl curl wget tar
В дальнейшем все файлы центра сертификации будут храниться в каталоге /opt/pki.
Для удобства сразу создадим отдельные директории для корневого и промежуточного центров сертификации:
mkdir -p /opt/pki/{root,intermediate}
cd /opt/pki
В результате будет создана следующая структура каталогов:
/opt/pki
├── root
└── intermediate
Каталог root будет использоваться для хранения файлов корневого центра сертификации (Root CA), а каталог intermediate - для файлов промежуточного центра сертификации (Intermediate CA). Такое разделение позволит избежать путаницы и упростит дальнейшее обслуживание инфраструктуры PKI.
3. Создание Root CA (OpenSSL)
Root CA (Root Certificate Authority) - это корневой центр сертификации и основа доверия всей инфраструктуры.
3.1 Генерация приватного ключа
Для начала создадим приватный ключ корневого центра сертификации:
openssl genrsa -out root/ca.key 4096
Параметр 4096 указывает длину RSA-ключа в битах. Такой размер считается надёжным и широко используется в корпоративных инфраструктурах.
После создания ключа ограничим доступ к нему:
chmod 600 root/ca.key
Права 600 означают, что читать и изменять файл сможет только его владелец.
Важно: файл
ca.keyявляется самым важным элементом всей инфраструктуры. Любой, кто получит доступ к этому ключу, сможет выпускать сертификаты от имени вашей организации.
3.2 Создание сертификата Root CA
Теперь создадим корневой сертификат, который будет использоваться как источник доверия для всей инфраструктуры:
openssl req -x509 -new -nodes \
-key root/ca.key \
-sha256 -days 3650 \
-out root/ca.crt \
-subj "/C=RU/O=tex-lab/CN=tex-lab Root CA"
Разберём основные параметры команды:
req- создание запроса на сертификат.-x509- вместо запроса сразу создать сертификат.-key root/ca.key- использовать ранее созданный приватный ключ.-sha256- алгоритм хеширования сертификата.-days 3650- срок действия сертификата в днях (10 лет).-out root/ca.crt- файл для сохранения сертификата.-subj- информация о владельце сертификата.
После выполнения команды будет создан файл:
root/ca.crt
Именно его необходимо будет распространять на клиентские устройства, серверы и рабочие станции для формирования доверенной среды.
Проверить содержимое сертификата можно следующей командой:
openssl x509 -in root/ca.crt -text -noout
В результате вы увидите подробную информацию о сертификате, включая срок действия, используемый алгоритм шифрования и данные владельца.
На данном этапе мы получили корневой центр сертификации, который станет основой для создания всей дальнейшей инфраструктуры PKI. Далее создадим Intermediate CA, который будет использоваться для выпуска рабочих сертификатов.
4. Создание Intermediate CA
Как уже говорилось ранее, Root CA не рекомендуется использовать для выпуска сертификатов серверов и пользователей. Вместо этого создаётся промежуточный центр сертификации (Intermediate CA), который будет выполнять всю повседневную работу по выпуску сертификатов.
4.1 Генерация приватного ключа
Для начала создадим приватный ключ промежуточного центра сертификации:
openssl genrsa -out intermediate/intermediate.key 4096
Как и в случае с Root CA, используется RSA-ключ длиной 4096 бит.
После создания ключа ограничим права доступа:
chmod 600 intermediate/intermediate.key
Теперь файл сможет читать и изменять только его владелец.
Важно: несмотря на то, что данный ключ не является корневым, он также требует надёжной защиты. С его помощью можно выпускать сертификаты для любых сервисов вашей инфраструктуры.
4.2 Создание запроса на подпись сертификата (CSR)
Теперь необходимо сформировать запрос на выпуск сертификата для Intermediate CA.
CSR (Certificate Signing Request) содержит информацию о будущем сертификате и будет передан Root CA для подписи.
Создадим запрос:
openssl req -new \
-key intermediate/intermediate.key \
-out intermediate/intermediate.csr \
-subj "/C=RU/O=tex-lab/CN=tex-lab Intermediate CA"
Разберём основные параметры:
req- создание запроса на сертификат.-new- создать новый CSR.-key intermediate/intermediate.key- использовать ранее созданный приватный ключ.-out intermediate/intermediate.csr- сохранить запрос в указанный файл.-subj- информация о владельце сертификата.
После выполнения команды будет создан файл:
intermediate/intermediate.csr
На данный момент Intermediate CA ещё не существует как полноценный центр сертификации. Мы лишь создали запрос на выпуск его сертификата.
4.3 Подпись Intermediate CA корневым сертификатом
На предыдущем шаге мы создали запрос на выпуск сертификата для Intermediate CA. Теперь этот запрос необходимо подписать с помощью Root CA.
Именно после этого Intermediate CA станет полноценным промежуточным центром сертификации и сможет использоваться для выпуска сертификатов внутри организации.
Выполним подпись:
openssl x509 -req -in intermediate/intermediate.csr \
-CA root/ca.crt \
-CAkey root/ca.key \
-CAcreateserial \
-out intermediate/intermediate.crt \
-days 1825 \
-sha256
Разберём основные параметры команды:
-req- использовать запрос на сертификат (CSR).-in intermediate/intermediate.csr- файл запроса на подпись.-CA root/ca.crt- сертификат корневого центра сертификации.-CAkey root/ca.key- приватный ключ Root CA.-CAcreateserial- создать серийный номер сертификата.-out intermediate/intermediate.crt- сохранить готовый сертификат.-days 1825- срок действия сертификата (5 лет).-sha256- использовать алгоритм SHA-256.
После выполнения команды будет создан сертификат:
intermediate/intermediate.crt
Root CA больше не потребуется для повседневной работы. Его рекомендуется сохранить в безопасном месте и использовать только при необходимости выпуска нового Intermediate CA или восстановления инфраструктуры.
Для проверки созданного сертификата можно выполнить команду:
openssl x509 -in intermediate/intermediate.crt -text -noout
Если сертификат успешно отображается, можно переходить к настройке системы автоматической выдачи сертификатов.
4.4 Проверка цепочки доверия
Выполним:
openssl verify \
-CAfile root/ca.crt \
intermediate/intermediate.crt
Должны получить положительный результат:
5. Выпуск первого сертификата
В качестве примера выпустим сертификат для сервиса:
wiki.tex-lab.ru
5.1 Создание приватного ключа сервера
openssl genrsa -out wiki.tex-lab.ru.key 2048
5.2 Создание CSR
Создадим запрос на выпуск сертификата:
openssl req -new \
-key wiki.tex-lab.ru.key \
-out wiki.tex-lab.ru.csr \
-subj "/C=RU/O=tex-lab/CN=wiki.tex-lab.ru"
5.3 Подпись сертификата через Intermediate CA
Создаем файл расширений:
cat > intermediate_ca.ext <<EOF
basicConstraints=critical,CA:true,pathlen:0
keyUsage=critical,keyCertSign,cRLSign
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
EOF
Этот файл intermediate_ca.ext задаёт расширения для промежуточного CA-сертификата при его создании в OpenSSL.
Здесь указывается, что сертификат является CA (CA:true) с ограничением по цепочке (pathlen:0), разрешены подпись сертификатов и списков отзыва (keyCertSign, cRLSign), а также настраиваются идентификаторы ключей для корректной проверки цепочки доверия.
Теперь выпустим сертификат с помощью нашего Intermediate CA:
openssl x509 -req \
-in intermediate/intermediate.csr \
-CA root/ca.crt \
-CAkey root/ca.key \
-CAcreateserial \
-out intermediate/intermediate.crt \
-days 1825 \
-sha256 \
-extfile intermediate_ca.ext
5.4 Проверка сертификата
Проверим информацию о сертификате:
openssl x509 -in wiki.tex-lab.ru.crt -text -noout
5.5 Проверка цепочки доверия
openssl verify \
-CAfile root/ca.crt \
-untrusted intermediate/intermediate.crt \
wiki.tex-lab.ru.crt
Ожидаемый результат:
Что получилось
На этом этапе мы получили полноценную цепочку доверия:
Root CA
│
▼
Intermediate CA
│
▼
wiki.tex-lab.ru
Такой сертификат уже можно использовать в Nginx, Apache, VPN-серверах или других внутренних сервисах.
Заключение
В рамках статьи мы вручную создали собственный Root CA и Intermediate CA с помощью OpenSSL, а также познакомились с базовыми принципами построения PKI-инфраструктуры.
Несмотря на то, что современные решения позволяют автоматизировать большую часть работы с сертификатами, понимание устройства цепочки доверия остаётся важным для любого системного администратора или инженера.






