Minica - простой центр сертификации для локального использования

  • Автор:

miniCA-tls-ssl-certificates-for-local-000.png Шифрование трафика сегодня стало обыденностью, в том числе и для локальных ресурсов, а многие сервисы используют HTTPS по умолчанию. Все это требует упорядочивания работы с сертификатами, и если с внешними ресурсами мы можем использовать тот же Let's Encrypt, то с внутренними все сложнее. Можно использовать самоподписанные сертификаты, но по мере роста сети они будут доставлять только проблемы. Поэтому сегодня мы расскажем как создать собственный простой центр сертификации для локального использования.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Без шифрования и сертификатов сегодня не обойтись, даже для локальных ресурсов. Самый простой выход - использовать самоподписанные сертификаты. Но они имеют массу недостатков. Основной их них - это отсутствие доверия. Вам придется или постоянно обходить предупреждение об отсутствии доверия, либо добавлять на каждом узле такие сертификаты в доверенные. Пока таких ресурсов и узлов немного - это еще приемлемо, но потом начинает утомлять и вносить в работу хаос и неразбериху. Игнорировать предупреждения - тоже плохая практика, особенно если с ресурсами работают обычные пользователи.

Как быть? Выход один - развернуть собственный Центр сертификации (CA) и поставить выпуск сертификатов под централизованное управление, в этом случае вам будет достаточно распространить на собственные узлы корневой сертификат центра сертификации и вопрос доверия к любым выпущенным вами сертификатам будет решен.

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

В этом случае рекомендуем обратить внимание на Minica - очень простой и легкий центр сертификации, который выполняет одну простую задачу - выпускает сертификаты вашим узлам. Никаких дополнительных функций у него нет, даже списков отзыва (CRL), но в большинстве локальных сценариев это и не нужно, все узлы под нашим контролем.

С данным пакетом есть некоторая путаница, он присутствует в стандартных репозиториях Debian и Ubuntu, но установив его оттуда вы получите примитивный инструмент, который не годится ни на что, кроме тестовых сред. Поэтому мы будем устанавливать одноименный продукт из репозитория разработчика на Github.

Сначала нам потребуется установить Go tools, ссылку на скачивание можно найти на данной странице. На момент написания статьи был доступен пакет go1.23.0.linux-amd64.tar.gz.

Все приведенные ниже команды следует выполнять от имени суперпользователя (root) или через sudo.

Перейдем в домашнюю директорию и создадим там папку для временных файлов:

cd ~
mkdir tmp

Перейдем в нее и скачаем Go tools:

cd tmp
wget https://go.dev/dl/go1.23.0.linux-amd64.tar.gz

Удалим предыдущую установку (если есть) и установим скачанный пакет:

 rm -rf /usr/local/go && tar -C /usr/local -xzf go1.23.0.linux-amd64.tar.gz

После чего откроем /etc/profile и в самый конец добавим строку:

export PATH=$PATH:/usr/local/go/bin

Теперь нужно выйти и повторно зайти в систему, либо перезагрузить компьютер.

Установим пакет для работы с git:

apt install git

Затем вернемся во временную папку:

cd ~/tmp

И скачаем утилиту из репозитория разработчика:

git clone https://github.com/jsha/minica.git

Перейдем в папку проекта и выполним его сборку:

cd minica
go build

Для удобства использования скопируем собранную утилиту в директорию к бинарным файлам:

cp minica /sbin

Теперь вернемся в домашнюю директорию и создадим папку для сертификатов:

mkdir ~/certs

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

Переходим в директорию центра сертификации:

cd ~/certs

И производим выпуск первого сертификата, в нашем случае мы выпустим сертификат для узла Proxmox:

minica --domains pve.example.lab,proxmox.example.lab   --ip-addresses 192.168.111.25

Синтаксис очень прост, после ключа domains указываем желаемые доменные имена, через запятую, без пробелов, а после ключа ip-addresses можем указать IP-адрес или адреса. В поле CN (Common Names) будет записан первый указанный домен или адрес, остальные будут в поле SAN (Subject Alternative Names). А в директории с сертификатами появится папка с именем CN в которой будет закрытый ключ и сертификат для указанного узла. Срок действия сертификата - 2 года и 30 дней.

Одновременно с этим в корневой директории будет сформирована ключевая пара центра сертификации, корневой сертификат нам потребуется распространить на все узлы для того, чтобы они доверяли выпущенным нами сертификатам. Корневой сертификат minica.pem как понятно из названия, находится в текстовом формате PEM, для его установки на Windows (и не только) конвертируем его в бинарный формат:

openssl x509 -in minica.pem -out minica.crt -outform DER

После чего скачиваем файл minica.crt и устанавливаем данный сертификат в Доверенные корневые центры сертификации.

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал



Loading Comments