Речь пойдёт про open source центр сертификации от компании SmallStep - step-ca. Его можно развернуть у себя и использовать для различных задач. Я расскажу на примере получения HTTPS-сертификатов X.509 для локальных веб ресурсов с помощью протокола ACME и одноимённой утилиты. Помимо этого на базе step-ca можно организовать:
◽выдачу SSH-сертификатов для пользователей
◽выпуск токенов единого входа OAuth OIDC
◽выпуск клиентских сертификатов X.509 для TLS аутентификации
Всё это описано в документации и в рамках заметки не раскрыть.
Установка step-ca описана в документации. Выглядит она относительно просто, так как есть готовые пакеты. А относительно, потому что юнит systemd и рабочие каталоги придётся делать вручную.
Вот инструкция для установки на Debian/Ubuntu:
# wget https://dl.smallstep.com/cli/docs-ca-install/latest/step-cli_amd64.deb# dpkg -i step-cli_amd64.deb# wget https://dl.smallstep.com/certificates/docs-ca-install/latest/step-ca_amd64.deb# dpkg -i step-ca_amd64.debПосле установки делаем начальную настройку, но перед этим выполним ручную инициализацию. Покажу свои ответы на вопросы в тестовой среде, чтобы вам не гадать, что там отвечать. Хотя по смыслу понятно.
# step-cli ca init✔ Deployment Type: Standalone✔ (e.g. Smallstep): PrivateCA (можно любое имя использовать)✔ (e.g. :443 or 127.0.0.1:443): :443✔ (e.g. you@smallstep.com): zeroxzed@gmail.com✔ [leave empty and we'll generate one]:✔ Password: E}b;-9DU9UyАВ8TU7$FINl-T8OMТеперь переносим настройки в
/etc/step-ca и запускаем как службу. # useradd --user-group --system --home /etc/step-ca --shell /bin/false step# setcap CAP_NET_BIND_SERVICE=+eip $(which step-ca)# mkdir /etc/step-ca# mv $(step path)/* /etc/step-ca# touch /etc/step-ca/password.txt# chmod 600 /etc/step-ca/password.txt# mcedit /etc/step-ca/password.txt# chown -R step:step /etc/step-caВ файл
password.txt записываем пароль от CA, который был создан во время инициализации. В файлах /etc/step-ca/config/ca.json и defaults.json меняем все пути с /root/.step на /etc/step-ca. И создаём юнит для systemd:# mcedit /etc/systemd/system/step-ca.serviceСодержимое не привожу, оно длинное, в заметку не уместится. Взял 1 в 1 из документации, он же в репозитории.
# systemctl daemon-reload# systemctl enable --now step-caСлужба должна запуститься на порту 443. Можно браузером зайти. Там будет страница с ошибкой, потому что никакого веб интерфейса нет, но тем не менее будет видно, что сервис работает.
Сразу отмечу важный нюанс. По умолчанию step-ca выпускает сертификаты на 24 часа. Для каких-то задач это, наверное, нормально, но для веб серверов не вижу смысла перевыпускать так часто, даже с учётом того, что это автоматизировано. Можете оставить так, а можете увеличить время. Тут об этом рассказано в доках.
Активируем ACME провизионер в step-ca:
# step ca provisioner add acme --type ACMEЭта команда добавит некоторые настройки в ca.json. Перезапускаем службу:
# systemctl restart step-caТеперь можно брать acme.sh или любой другой клиент (certbot и т.д.) и настраивать выпуск сертификатов через свой CA. Для этого надо либо на клиентских системах добавить root_ca.crt в системные, либо при запуске клиента указывать явно:
acme.sh --issue --standalone -d debian12-vm \ --server https://10.20.1.36/acme/acme/directory \ --ca-bundle ~/certs/root_ca.crt \ --fullchain-file debian12-vm.crt \ --key-file debian12-vm.keyРаботаем с этим CA так же, как и с другими: добавляем серты в веб сервера, настраиваем автообновление. И не забываем в клиентские машины добавить CA в доверенные, чтобы в браузерах не было предупреждения.
#security #webserver