Добавление сертификатов в доверенные

Ручная установка

  1. Скопировать файлы сертификатов на сервер backend
  2. Подключиться к серверу backend по протоколу ssh
  3. Если необходимо - выполнить конвертацию сертификатов в формат *.crt командами: openssl x509 -inform DER -in xxxxxxxxxxxxx.cer -out xxxxxxxxxxxxx.cer.crt и/или openssl x509 -inform PEM -in xxxxxxxxxxxxx.cer -out xxxxxxxxxxxxx.cer.crt
  4. скопировать файлы в контейнер командой: docker cp xxxxxxxxxxxxxxxx.crt имя_контейнера:/root
  5. Войти в командную строку контейнера командой: docker exec -ti имя_контейнера /bin/bash
  6. Выполнить внутри контейнера команду update-ca-certificates
  7. выполнить команду: docker restart имя_контейнера
  8. важное замечание - при остановке контейнера через docker-compose down/up - необходимо повторить шаги с п.1 по п.7

Установка сертификата во все контейнеры SimpleOne через скрипт

Часть сервисов SimpleOne (`backend`, `schedule`, `business_rule`, `event`) делает исходящие HTTPS-запросы к внешним системам (почта, LDAP, внешние API). Если такая система использует самоподписанный или корпоративный сертификат, его нужно добавить в доверенные внутри контейнеров — иначе запросы будут падать с ошибкой проверки TLS.

Скрипт ниже автоматизирует установку сертификата сразу во все подходящие запущенные контейнеры, но без ручного `docker exec` для каждого контейнера).

## Скрипт

Сохраните как `add_cert.sh` в одной директории с файлом сертификата:

#!/bin/bash

# Проверка, что передан аргумент (имя файла сертификата)

if [ -z "$1" ]; then

    echo "Ошибка: Необходимо указать имя файла сертификата в текущей директории."

    echo "Пример использования: bash $0 certificate.crt"

    exit 1

fi




cert_path="./$1"




# Проверка, что файл существует

if [ ! -f "$cert_path" ]; then

    echo "Ошибка: Файл сертификата '$cert_path' не найден."

    exit 1

fi




# Получение списка контейнеров, в которые будет ставиться сертификат

containers=($(docker ps --format '{{.Names}}' | grep -E 'backend|schedule|business_rule|event'))




# Цикл для обхода всех выбранных контейнеров

for container in "${containers[@]}"; do

    echo "Обработка контейнера: $container"

    # Копирование сертификата в контейнер

    docker cp "$cert_path" "$container:/usr/local/share/ca-certificates/"

    # Обновление списка доверенных сертификатов

    docker exec "$container" update-ca-certificates

    echo "Сертификат добавлен и обновлен в контейнере $container."

    echo ""

done




echo "Операция завершена: сертификат '$1' добавлен и обновлен во всех указанных контейнерах."

## Как использовать

1. Положите сертификат (`.crt`) и скрипт в одну директорию на сервере.

2. Дайте права на выполнение: `chmod +x add_cert.sh`

3. Запустите: `./add_cert.sh certificate.crt`

4. Скрипт сам найдёт запущенные контейнеры имеющими в названии `backend`, `schedule`, `business_rule`, `event` и установит сертификат в каждый.

## Важно

Сертификат ставится во временный слой контейнера и **пропадёт при пересоздании** (обновление платформы, `docker-compose up -d` с новым образом и т.п.) — после этого скрипт нужно запустить снова.

3 лайка

Создайте, пожалуйста, статью в KB

1 лайк