Прописать сертификаты в зеркало

Для работы с сертификатами в зеркале можно:

  • импортировать свой сертификат можно на этапе инициализации зеркала в закрытом контуре (init, make);
  • импортировать свой сертификат на этапе развертывания nginx для внешнего nexus в закрытом контуре;
  • применить отдельной командой stm cert import, в которую необходимо подставить свои значения параметров.
Команды и доступные параметры для работы с сертификатами
Команда Описание команды Параметр Описание параметра
stm cert import Импорт сертификата (приведет к перезапуску зеркала) --cert-file Файл сертификата для импорта
--privkey-file Файл ключа для импорта
stm cert csr Сформировать запрос на получение сертификата --fqdn Адрес, на который будет сгенерирован запрос

Примеры:

Команда формирования запроса на получение сертификата
# csr и ключ будут находиться в каталоге export
stm cert csr --fqdn=mirror.corpdomain.ru
Команда выпуска сертификата, используя CSR и свой CA (для openssl)
openssl x509 -req -sha512  -in export/csr.pem -days 3650 -CA ca/ca_cert.pem -CAkey ca/ca_private_key.pem -CAcreateserial -out export/mirror_cert.pem -copy_extensions copyall
# Добавить к полученному сертификату свой CA
cat ca/ca_cert.pem >> export/mirror_cert.pem
Команда импорта сертификата, когда зеркало уже инициализировано

Выполнение команды приведет к перезапуску зеркала

stm cert import --cert-file export/mirror_cert.pem --privkey-file export/privkey.pem

Требование к сертификату

  • Для импорта необходимо указать файл с цепочкой сертификатов и ключом;
  • Сертификаты и ключ должны быть в pem формате;
  • Цепочка сертификатов должна содержать ca и сам сертификат;
  • Сертификат должен содержать поле subjectAltName с fqdn зеркала (fqdn должен совпадать с указанным параметром –fqdn или со значением в конфигурации зеркала) или wildcard доменом (должен совпадать с доменом зеркала);
  • При выпуске сертификата, используя CSR, необходимо сохранить Extensions (для openssl ключ -copy_extensions copyall).

Получение сертификата с Acme сервера (step-ca)

Самостоятельно модуль управление зеркалом не поддерживает работу с Acme сервером. Есть возможность настроить получение сертификата с Acme при помощи certbot. Для этого необходимо:

  1. Остановить контейнер с зеркалом
Команда
podman stop shturval_proxy

или

stm stop
  1. Запросить сертификат
Команда
REQUESTS_CA_BUNDLE=ПУТЬ_ДО_КОРНЕВОГО_СЕРТИФИКАТА certbot certonly -d FQDN_СЕРТИФИКАТА --server АДРЕС_ACME_СЕРВЕРА --standalone --agree-tos -m EMAIL
Пример
REQUESTS_CA_BUNDLE=/home/shturval/root_ca.crt certbot certonly -d mirror.ip-10-11-12-132.shturval.link --server https://issuer.ip-10-11-12-3.shturval.link:9443/acme/acme/directory --standalone --agree-tos -m user@chislitellab.ru
  1. Скопировать сертификаты в каталог зеркала
Команда
cp /etc/letsencrypt/live/FQDN_СЕРТИФИКАТА/fullchain.pem ПУТЬ_ДО_ЗЕРКАЛА/config/certs/dst.pem
cp /etc/letsencrypt/live/FQDN_СЕРТИФИКАТА/fullchain.pem ПУТЬ_ДО_ЗЕРКАЛА/config/certs/fullchain.pem
cp /etc/letsencrypt/live/FQDN_СЕРТИФИКАТА/privkey.pem ПУТЬ_ДО_ЗЕРКАЛА/config/certs/privkey.pem
#Пример
cp /etc/letsencrypt/live/mirror.ip-10-31-145-132.shturval.link/fullchain.pem /home/shturval/shturval-mirror/config/certs/dst.pem
cp /etc/letsencrypt/live/mirror.ip-10-31-145-132.shturval.link/fullchain.pem /home/shturval/shturval-mirror/config/certs/fullchain.pem
cp /etc/letsencrypt/live/mirror.ip-10-31-145-132.shturval.link/privkey.pem /home/shturval/shturval-mirror/config/certs/privkey.pem
  1. Запустить зеркало
Команда
podman start shturval_proxy

или

stm start
  1. Удалить задания, созданные Certbot
Команда
systemctl stop certbot.timer
systemctl disable certbot.timer
  1. Добавить в задания (cron, systemd timer) скрипт обновления сертификата (предварительно отредактировав под свою инсталляцию)
Команда
#!/bin/bash

#Отредактировать значения под свою инсталляцию
REQUESTS_CA_BUNDLE=/home/shturval/root_ca.crt #Путь до файла корневого сертификата
DIRECTORY_URL=https://issuer.ip-10-11-12-3.shturval.link:9443/acme/acme/directory #Адрес Acme сервера
DOMAIN_NAME=mirror.ip-10-11-12-132.shturval.link #Имя, на которое выписывается сертификат
MIRROR_PATH=/home/shturval/shturval-mirror #Путь до каталога с зеркалом

#Редактировать, только если менялись значения по умолчанию
NGINX_CONTAINER_NAME=shturval_proxy #Имя контейнера с nginx
PODMAN_BIN=/usr/local/bin/podman #Путь до podman

${PODMAN_BIN} stop ${NGINX_CONTAINER_NAME}
REQUESTS_CA_BUNDLE=$REQUESTS_CA_BUNDLE certbot -q renew --server ${DIRECTORY_URL}
cp -f /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem ${MIRROR_PATH}/config/certs/dst.pem
cp -f /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem ${MIRROR_PATH}/config/certs/fullchain.pem
cp -f /etc/letsencrypt/live/${DOMAIN_NAME}/privkey.pem ${MIRROR_PATH}/config/certs/privkey.pem
${PODMAN_BIN}  start ${NGINX_CONTAINER_NAME}
×