Перейти к основному содержимому
Версия: 1.12

Сертификаты

Соединения между компонентами Sage происходят по защищённым соединениям с использованием сертификатов TLS.

Сертификаты по умолчанию

По умолчанию установщик Sage сгенерирует все необходимые (самоподписанные) сертификаты.

Cобственные сертификаты

Если вы хотите использовать собственные TLS-ключи и сертификаты, сохраните их в формате PEM и поместите в директорию /certificates/{{ sage_clan }}_{{ sage_env }}_{{ sage_datacenter }} на контрольном хосте. После того как вы запустите контейнер установщика, сертификаты будут туда смонтированы.

Внимание

Если ваша организация использует промежуточные центры сертификации, то для корректной работы Sage необходимо включать во все сертификаты (кроме root-ca.pem) полную цепочку до корневого сертификата. Например, файл sage-internal.pem должен содержать последовательно склеенные PEM-блоки в следующем порядке:

  1. Сертификат сервера (выпущенный для Sage).
  2. Сертификаты промежуточных ЦС (intermediate CA).

Пример структуры файла sage-internal.pem:

-----BEGIN CERTIFICATE-----
( сертификат сервера sage-internal )
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
( промежуточный сертификат ЦС, выпустившего сертификат сервера )
-----END CERTIFICATE-----

Важно: порядок сертификатов в файле должен строго соблюдаться — от конечного (листового) к корневому. Нарушение порядка или отсутствие любого из звеньев цепочки приведёт к ошибкам проверки TLS-соединения со стороны клиентов.

Список необходимых файлов (приватные ключи и сертификаты):

  • root-ca.pem – корневой сертификат.

  • {{ inventory_hostname }}.pem, {{ inventory_hostname }}-key.pem – сертификаты и приватные TLS-ключи для хостов с приложениями Sage.

    Необходимо выписать для всех хостов из файла hosts.yml;

    Внимание

    Сертификаты для хостов OpenSearch должны поддерживать как серверный, так и клиентский вариант EKU (Extended Key Usage):

    • serverAuth — только как TLS-сертификат сервера (HTTPS)
    • clientAuth — только как TLS-сертификат клиента (mTLS)

    Должны быть выписаны на FQDN хоста;

  • sage-{{ inventory_hostname }}.pem, sage-{{ inventory_hostname }}-key.pem – сертификаты и приватные TLS-ключи для балансировщиков Sage.

    Необходимо выписать на все хосты из группы nginx;

    Сертификаты должны быть выписаны на доменные имена из списка:

    • {{ inventory_hostname }} – FQDN хоста;
    • {{ sage_external_domain }} – внешний домен Sage;
  • sage-internal.pem, sage-internal-key.pem – сертификат и приватный TLS-ключ для внутреннего взаимодействия сервисов.

    к сведению

    Рекомендуется выписать wildcard-сертификат на имя *.internal.{{ sage_external_domain }}, но при технической невозможности допускается выписать на список следующих имён:

    • celestia-mage.internal.{{ sage_external_domain }}
    • dp-connector.internal.{{ sage_external_domain }}
    • dtracing-collector.internal.{{ sage_external_domain }}
    • frost-rw.internal.{{ sage_external_domain }}
    • grafana.internal.{{ sage_external_domain }}
    • manul.internal.{{ sage_external_domain }}
    • pager.internal.{{ sage_external_domain }}
    • sauron.internal.{{ sage_external_domain }}
  • spirit.pem, spirit-key.pem – сертификат и приватный TLS-ключ для хостов в группе spirit_iam_apps.

    Сертификат должен быть выписан на доменные имена из списка:

    • {{ inventory_hostname }} – хост, на котором установлен Spirit IAM;

    • {{ sage_spirit_external_domain }} – внешний домен Spirit IAM;

Файлы, содержащие сертификаты для доменных имён {{ sage_external_domain }}, *.internal.{{ sage_external_domain }} и {{ sage_spirit_external_domain }}, могут содержать разные сертификаты или один и тот же сертификат.

warning

Смешанное использование собственных сертификатов и сертификатов, выпускаемых контейнером-установщиком — не поддерживается.

Проверка сертификатов

Для проверки валидности сертификата можно использовать утилиту openssl.

Проверка валидности сертификата

Проверка валидности сертификата
openssl x509 -in cert.pem -text -noout
Пример вывода
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1234567890
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=Example CA
Validity
Not Before: Jan 1 00:00:00 2024 GMT
Not After : Dec 31 23:59:59 2025 GMT
Subject: CN=example.com
...

Проверка приватного ключа

Формат RSA

Проверка приватного ключа RSA
openssl rsa -in key.pem -check -noout
Пример вывода
RSA key ok

Формат Elliptic Curve

Проверка приватного ключа EC (Elliptic Curve)
openssl ec -in key.pem -check -noout
Пример вывода
EC key ok

Формат PKCS#8

Проверка ключа в формате PKCS#8
openssl pkey -in key.pem -check -noout
Пример вывода
Key ok

Проверка срока действия сертификата

Проверка периода действия сертификата
openssl x509 -in cert.pem -noout -dates
Пример вывода
notBefore=Jan 1 00:00:00 2024 GMT
notAfter=Dec 31 23:59:59 2025 GMT
  • notBefore — дата начала действия сертификата;
  • notAfter — дата окончания действия сертификата.
Быстрая проверка даты окончания
openssl x509 -in cert.pem -noout -enddate
Пример вывода
notAfter=Dec 31 23:59:59 2025 GMT
к сведению

Сертификат считается невалидным, если:

  • текущая дата раньше notBefore (сертификат ещё не активен)
  • текущая дата позже notAfter (сертификат истёк)

Проверка соответствия сертификата и ключа

Сравнение modulus сертификата и ключа
openssl x509 -noout -modulus -in cert.pem | openssl md5
openssl rsa -noout -modulus -in key.pem | openssl md5
Пример вывода
MD5(stdin)= a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
MD5(stdin)= a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
к сведению

Хэши должны совпадать. Если значения различаются — ключ не соответствует сертификату.

Проверка цепочки сертификатов

Проверка цепочки сертификатов
openssl crl2pkcs7 -nocrl -certfile cert.pem | openssl pkcs7 -print_certs -noout

Команда выведет список всех сертификатов в файле с указанием полей subject и issuer, что позволит убедиться в правильности построения цепочки доверия.

Проверка сертификата на соответствие доменному имени

Проверка CN и SAN сертификата
openssl x509 -in cert.pem -noout -subject -ext subjectAltName
Пример вывода
subject=CN = example.com
X509v3 Subject Alternative Name:
DNS:example.com, DNS:www.example.com, DNS:api.example.com
  • subject — основное доменное имя (Common Name)
  • Subject Alternative Name — дополнительные доменные имена (SAN)