Справка

Корневой сертификат: как настроить доверие к внутреннему центру сертификации

Безоблачный Pyrus

Если серверы, к которым Pyrus обращается по HTTPS (боты, почтовые серверы, SSO, S3-хранилище), используют сертификаты вашего внутреннего центра сертификации (CA), Pyrus должен доверять этому центру сертификации. Иначе он не сможет подключиться к этим серверам: запросы будут завершаться ошибкой проверки сертификата.

Сертификат добавляется в настройки Pyrus Datacenter, поэтому при обновлении он сохраняется.

Подготовьте сертификат

Нужен корневой сертификат центра сертификации в формате PEM — текстовый файл, который начинается со строки -----BEGIN CERTIFICATE-----.

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

Если в цепочке есть промежуточные центры сертификации, добавьте их сертификаты в тот же файл после корневого:

cat root-ca.crt issuing-ca.crt > corp-root-ca.crt

Если сертификат в двоичном формате DER (файл .cer без текстового заголовка), преобразуйте его:

openssl x509 -inform der -in corp-root-ca.cer -out corp-root-ca.crt

Установка через Docker Compose

Все команды выполняйте на сервере Pyrus в папке, где находится docker-compose.yml.

  1. Положите сертификат в папку certs и разрешите всем пользователям его читать: сервисы Pyrus работают без прав администратора.

    mkdir -p certs
    cp corp-root-ca.crt certs/corp-root-ca.crt
    chmod 644 certs/corp-root-ca.crt
    
  2. Рядом с docker-compose.yml создайте файл docker-compose.override.yml:

    x-corp-ca: &corp-ca
      volumes:
        - ./certs/corp-root-ca.crt:/etc/ssl/certs/corp-root-ca.pem:ro
    
    services:
      web-api: *corp-ca
      async-worker: *corp-ca
      files: *corp-ca
      identity-server: *corp-ca
      bind: *corp-ca
      mail-reader: *corp-ca
      mail-sender: *corp-ca
      notification-service: *corp-ca
      pyrus-schedule-to-today: *corp-ca
      preview: *corp-ca
      pyrus-setup: *corp-ca
      elastic-console: *corp-ca
      familiar: *corp-ca
      stt-service: *corp-ca
      goskey: *corp-ca
    

    На серверах с включённым SELinux (RHEL, CentOS, Rocky Linux) замените в строке под volumes окончание :ro на :ro,z.

    Docker Compose учитывает этот файл автоматически. При обновлении Pyrus вы заменяете только docker-compose.yml, поэтому настройка сохраняется.

    Обратите внимание: в файле docker-compose.override.yml должны быть только сервисы, которые есть в вашем docker-compose.yml. Иначе Docker Compose не запустится и выдаст ошибку service "..." has neither an image nor a build context specified.

    Посмотреть список сервисов можно командой:

    docker compose --profile all config --services
    
  3. Пересоздайте контейнеры:

    docker compose up -d
    
  4. Убедитесь, что сертификат виден внутри контейнера:

    docker exec pyrus-web-api head -1 /etc/ssl/certs/corp-root-ca.pem
    

    Команда должна вывести -----BEGIN CERTIFICATE-----.

Подсказка: если вы запускаете Docker Compose с явным указанием файла (docker compose -f docker-compose.yml ...), файл docker-compose.override.yml не будет учтён. Укажите его явно: docker compose -f docker-compose.yml -f docker-compose.override.yml up -d.

Установка в Kubernetes

Нужен Helm-чарт pyrus-datacenter версии 2.0.40 или новее. Текущую версию показывает колонка CHART в выводе команды:

helm -n pyrus list

В примерах ниже пространство имён (namespace) — pyrus, имя релиза — pyrus-datacenter. Если у вас они другие, подставьте свои.

  1. Добавьте сертификат в файл values, который вы передаёте при каждом helm upgrade. Чарт сам создаст Secret и подключит файл к сервисам Pyrus:

    defaults:
      secretRef:
        "/etc/ssl/certs":
          corp-root-ca.pem: |
            -----BEGIN CERTIFICATE-----
            ...содержимое corp-root-ca.crt...
            -----END CERTIFICATE-----
    

    Все строки сертификата должны иметь одинаковый отступ. Если в файле уже есть раздел defaults, добавьте secretRef в него.

    Обратите внимание: не называйте файл ca-certificates.crt — так вы замените системный набор сертификатов целиком.

  2. Примените изменения своей обычной командой обновления. Укажите текущую версию чарта, чтобы вместе с настройками не обновился сам чарт:

    helm -n pyrus upgrade pyrus-datacenter pyrus-datacenter-k8s/pyrus-datacenter \
      -f pyrus.values.yaml \
      --version <текущая версия чарта> \
      --reset-values
    
  3. Убедитесь, что сертификат виден внутри пода:

    kubectl -n pyrus exec deploy/pyrus-web-api -- head -1 /etc/ssl/certs/corp-root-ca.pem
    

    Команда должна вывести -----BEGIN CERTIFICATE-----.

Обратите внимание: при обновлении с флагом --reset-values всегда передавайте файл values с сертификатом. Без него чарт удалит сертификат, и Pyrus снова перестанет доверять вашему центру сертификации.

Была ли эта статья полезной?