Общая информация о PKI

Что это такое вообще, и для чего?

Если читатель попал на эту страницу случайно или просто от скуки, значит либо он в курсе предмета разговора, либо он закроет страницу в ближайшие несколько секунд. Остальные же, попавшие сюда, скорее всего, из поисковых систем, вероятно, практически ничего не знают об SSL-сертификатах как таковых, о том, где и каким образом их используют, как их делают, и какие задачи они призваны выполнять.

Очень вероятно, что читатель, например, заморочился с собственным веб-сервером для работы или не дай бог фриланса. Нагуглил в интернетах как создать свой собственный сертификат для сайта, выбрал среди чуть более 9000 ответов похожий на правду, и создал его — самоподписанный сертификат. И сайт для разработки так и не «взлетел»... Читатель в поисках ответов, возможно, и попал сюда. Добро пожаловать!.

Если читателя пугает термин самоподписанный сертификат, ему следует уяснить главное: в мире еще не существует ни одного SSL-сертификата, который был бы выпущен Центром сертификации, сертификат которого не является самоподписанным.

Если просмотреть цепочку любого конечного SSL-сертификата, и перейти к самому верхнему «издателю», читатель увидит, что он сам же для себя этот сертификат и выпустил. Почему же на его клиентские сертификаты не ругается бразуер? А потому что мы живем в жестоком капиталистическом мире, в котором кто-то когда-то решил, что во всём мире очень ограниченный перечень издателей может иметь статус Доверенного корневого центра сертификации, и в реестрах операционных систем их сертификаты будут в числе доверенных, как говорится, по-умолчанию.

Не самоподписанных сертификатов не существует. В нашей галактике ещё не обнаружен издатель, готовый выпустить сертификат для Землянского центра сертификации.

Как выглядит PKI-инфраструктура?

За достаточно громким и ёмким названием «инфраструктура», по сути, ничего такого ошеломляющего не стоит. В зависимости от того, сколько уровней есть или предполагается в вашей PKI, ровно столько, всего-навсего, каталогов на диске и будет. Самым, пожалуй, распространенным является формат двухуровневой PKI-инфраструктуры.

  1. Корневой центр сертификации — выпускает и подписывает (своим собственным закрытым ключом) сертификаты для себя самого и для подчиненных центров сертификации, отзывает сертификаты подчиненных центров сертификации, публикует листы отозванных сертификатов (CRL). Сертификат Корневого центра сертификации выпускается на очень длительный срок: 20, 30, 40, 50 лет.
  2. Промежуточный центр сертификации — выпускает и подписывает (своим собственным закрытым ключом) только сертификаты конечных устройств, узлов, серверов и вообще чего угодно. Промежуточный центр сертификации может, даже, выпустить и подписать сертификат подчиненного ему Центра сертификации, который сможет, в свою очередь, тоже выпускать и подписывать сертификаты конечных устройств и всего прочего. Срок, на который выпускается сертификат Промежуточного центра сертификации, может быть любым. Но не следует его устанавливать больше половины срока действия сертификата Корневого центра сертификации. Корневой выпущен на 20 лет? Значит Промежуточный выпускается на 10. Цель этого проста — нельзя допустить ситуации, в которых срок действия сертификата Издателя истечёт, а выпущенные им сертификаты ещё будут действовать. Это просто бессмысленно, так как все такие сертификаты автоматически будут признаваться недействительными.

Таким образом, на диске будет (может быть) следующая структура файлов и каталогов

    /opt
    |-- /openssl
    |--|-- /root-ca-ssl             # каталог Корневого центра сертификации
    |--|--|-- /certs
    |--|--|--|-- root-ca.domain.ru.crt
    |--|--|--|-- intermediate-ca.domain.ru.crt
    |--|--|-- /crl
    |--|--|-- /csr
    |--|--|--|-- intermediate-ca.domain.ru.csr
    |--|--|-- /newcerts
    |--|--|-- /private
    |--|--|--|-- root-ca.domain.ru.key
    |--|--|--|-- intermediate-ca.domain.ru.key
    |--|--|-- crlnumber
    |--|--|-- index.txt
    |--|--|-- openssl.cnf
    |--|--|-- serial
    |--|-- /intermediate-ca-ssl     # каталог Промежуточного центра сертификации
    |--|--|-- /certs
    |--|--|--|-- intermediate-ca.domain.ru.crt
    |--|--|--|-- ca-chain.domain.ru.pem
    |--|--|-- /crl
    |--|--|-- /csr
    |--|--|-- /newcerts
    |--|--|-- /private
    |--|--|--|-- intermediate-ca.domain.ru.key
    |--|--|-- crlnumber
    |--|--|-- index.txt
    |--|--|-- openssl.cnf
    |--|--|-- serial
    

Как видите, принципиальных отличий между каталогами Центров сертификации нет. Два идентичных каталога, главным отличием которых является отсутствие доступа Промежуточного центра сертификации к файлу закрытого ключа Корневого центра сертификации и к его списку отозванных сертификатов.

Хорошей, и, даже, необходимой практикой считается размещение каталога Корневого центра сертификации вообще физически в ином месте. В случае компрометацииего закрытого ключа, статус доверенных потеряют сразу все сертификаты, которые выпустил и сам Корневой, и подчиненные ему центры сертификации. В общем-то, после того, как выпущен и подписан сертификат промежуточного ЦС, Корневой нужен только для обновления собственного списка отозванных сертификатов. Если конфигурацией задан срок действия такого списка, скажем, в 180 дней, то каждые 180 дней необходимо формировать и публиковать новый список.

Данная статья не охватывает перечень команд для генерации файлов закрытых ключей, для выпуска сертификатов, для создания запросов на выпуск сертификатов и прочих команд. Эта информация выходит за рамки статьи, и здесь рассмотрена не будет. Пока что, во всяком случае.

Как использовать свою собственную PKI?

Чтобы на сертификаты, выпущенные вашей PKI-инфраструктурой, не «ругались», например, браузеры, необходимо, чтобы сертификаты ваших Корневого и Промежуточного центров сертификации были добавлены в соответствующие хранилища устройств.

Например, если у вас компания, в которой существует определенное число рабочих мест с компьютерами, подключенными к домену Active Directory, вам необходимо либо вручную, либо с помощью групповых политик поместить на каждом компьютере сертификат Корневого ЦС в хранилище Доверенных корневых центров сертификации, а сертификат Промежуточного ЦС — доверенных промежуточных центров сертификации. Как только вы это сделаете, любой конечный серфтикат, выпущенный вашим Промежуточным ЦС, например для внутреннего корпоративного веб-портала, будет доверенным. Ни один браузер не рискнёт сообщить о том, что с сертификатом что-то не так.

В случае, если речь идёт о Linux, например Ubuntu Server, следует поступить так...

:# mkdir -p /usr/local/share/ca-certificates/domain.ru
:# cp /opt/openssl/root-ca-ssl/certs/root-ca.domain.ru.crt /usr/local/share/ca-certificates/domain.ru/root-ca.domain.ru.crt
:# cp /opt/openssl/intermediate-ca-ssl/certs/intermediate-ca.domain.ru.crt /usr/local/share/ca-certificates/domain.ru/intermediate-ca.domain.ru.crt
:# update-ca-certificates

Запомните главное! Никогда не передавайте куда-либо и кому-либо файлы закрытых ключей ваших Центров сертификации. Вы должны передавать только файлы открытых ключей. Как только файл закрытого ключа без объективной на то причины попадает в руки других людей, сертификат считается скомпрометированным.

Какие сертификаты вы можете выпускать, имея собственную подобную PKI-инфраструктуру? Да вообще любые! Для сайтов, для почтовых серверов, для VPN-серверов и VPN-клиентов. Если перед вами, например, стоит задача подключить по LDAP какой-либо сторонний сервис к вашему каталогу Active Directory, чтобы реализовать доменную авторизацию пользователей, то, например, при работе с Windows Sever 2025 ваша эпопея потерпет неудачу, так как подобное подключение она позволяет делать только по ldaps:// — защищенному протоколу. А это значит, что вам понадобятся сертификаты и для контроллера домена, и для подключаемого сервера, которым и тот, и другой, будут доверять беспрепятственно.

Конечно же, здесь множество энтузиастов могут возразить: достаточно просто понизить уровень политики безопасности внутри домена AD, чтобы обойти необходимость использовать ldaps://, но таким умельцам автор может лишь удачи в их профессиональной деятельности пожелать. Пока есть вы, будем здравствовать мы.
Автор, конечно же, слышал про Let's Encrypt и certbot, однако же собственная PKI решает совершенно иные задачи, которые невозможно решить с помощью сертификатов Let's Encrypt. Например, организация корпоративного VPN посредством IKEv2 IPSec-туннеля. Там потребуется множество клиентских сертификатов для подключаемых устройств, подтверждать подлинность которых нужно с помощью соответствующего сертификата VPN-сервера. Ну, а если у читателя есть деньги на соответствующие коммерческие сертификаты, автор не против этого.

О чем нельзя забывать при работе со своей PKI?

При выпуске собственных сертификатов нужно помнить о нескольких важных вещах. Если их проигнорировать, это обязательно приведёт к потраченному времени на поиски причин абсолютно неочевидных и необъяснимых неприятностей.

  1. Срок действия выпускаемых сертификатов не должен превышать 13 месяцев. Технически вы любой сертификат можете выпустить хоть на 10 лет, но обязательно столкнётесь, например, с тем, что iPhone начальника отказывается подключаться к вашему новому self-hosted корпоративному мессенджеру.
  2. Если не уверены в том, что конечное устройство способно импортировать из контейнера PKCS#12 полную цепочку сертификации (смартфоны на Android и iOS не умеют), помещайте в него только сертификат устройства. Сертификаты ваших ЦС импортируйте на устройство отдельно в формате PEM.
  3. В 99% случаев при выборе способа шифрования файла закрытого ключа выпускаемого клиентского сертификата вам подойдёт RSA 2048. В оставшийся 1% входит, например, сертификат VPN IKEv2/IPSec для Microsoft Windows 10/11. Здесь потребуется сертификат ECC secp384r1.

Всё остальное придёт с опытом, или в виде результата оказываемых нами услугами.

У нас появился официальный канал в мессенджере Макс. Приглашаем всех желающих подписываться и читать.

Сайт принадлежит ООО Группа Ралтэк. 2014 — 2026 гг