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

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

  • импортировать свой сертификат на этапе инициализации зеркала в закрытом контуре (init, make);
  • импортировать свой сертификат на этапе развертывания nginx для внешнего nexus в закрытом контуре;
  • применить отдельной командой stm cert import, в которую необходимо подставить свои значения параметров.

Команды и доступные параметры для работы с сертификатами приведены в таблице 12.

Примеры:

  • Команда формирования запроса на получение сертификата:
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}