Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›Защита Elastic Stack ›Обновление сертификатов безопасности узлов

Обновление сертификатов безопасности с другим центром сертификации

Если вам нужно довериться новому центру сертификации из вашей организации или вам нужно сгенерировать новый центр сертификации самостоятельно, воспользуйтесь этим новым центром сертификации для подписи новых сертификатов узлов и укажите узлам доверять новому центру.

Генерация нового сертификата для транспортного уровня

Создайте новый сертификат центра сертификации или получите сертификат центра сертификации вашей организации и добавьте его в существующий хранилище доверенных центров сертификации. После завершения обновления сертификатов для всех узлов вы можете удалить старый сертификат центра сертификации из хранилища (но не раньше!).

В следующих примерах используются файлы PKCS#12, но те же шаги применяются к хранилищам ключей JKS.

  1. Откройте файл ES_PATH_CONF/elasticsearch.yml и проверьте имена и расположения хранилищ ключей, которые сейчас используются. Вы будете использовать те же имена для новых хранилищ ключей.

    В этом примере хранилище ключей и хранилище доверенных центров сертификации используют разные файлы. Ваша конфигурация может использовать один и тот же файл как для хранилища ключей, так и для хранилища доверенных центров сертификации.

    Эти инструкции предполагают, что предоставленный сертификат подписан доверенным центром сертификации, и режим проверки установлен на certificate. Эта настройка гарантирует, что узлы не будут пытаться выполнить проверку имени хоста.

    xpack.security.transport.ssl.keystore.path: config/elastic-certificates.p12
    xpack.security.transport.ssl.keystore.type: PKCS12
    xpack.security.transport.ssl.truststore.path: config/elastic-stack-ca.p12
    xpack.security.transport.ssl.truststore.type: PKCS12
    xpack.security.transport.ssl.verification_mode: certificate
  2. На любом узле вашего кластера сгенерируйте новый сертификат центра сертификации. Вам нужно выполнить этот шаг только один раз. Если вы используете сертификат центра сертификации своей организации, пропустите этот шаг.

    ./bin/elasticsearch-certutil ca --pem
    Параметры команды
    --pem
    Генерирует каталог, содержащий сертификат центра сертификации и ключ в формате PEM вместо PKCS#12.
    1. Введите имя сжатого выходного файла, который будет содержать ваш сертификат и ключ, или примите имя по умолчанию elastic-stack-ca.zip.
    2. Разархивируйте выходной файл. Результирующий каталог содержит сертификат центра сертификации (ca.crt) и закрытый ключ (ca.key).

      Храните эти файлы в защищенном месте, так как они содержат закрытый ключ вашего центра сертификации.

  3. На каждом узле вашего кластера импортируйте новый сертификат ca.crt центра сертификации в существующее хранилище доверенных центров сертификации. Этот шаг гарантирует, что ваш кластер доверяет новому сертификату центра сертификации. В этом примере используется утилита Java keytool для импорта сертификата в хранилище доверенных центров сертификации elastic-stack-ca.p12.

    keytool -importcert -trustcacerts -noprompt -keystore elastic-stack-ca.p12 \
    -storepass <password>  -alias new-ca -file ca.crt
    Параметры команды
    -keystore
    Имя хранилища доверенных центров сертификации, в которое вы импортируете новый сертификат центра сертификации.
    -storepass
    Пароль хранилища доверенных центров сертификации.
    -alias
    Имя, которое вы хотите присвоить новой записи сертификата центра сертификации в хранилище ключей.
    -file
    Имя нового сертификата центра сертификации для импорта.
  4. Проверьте, что новый сертификат центра сертификации был добавлен в хранилище доверенных центров сертификации.

    keytool -keystore config/elastic-stack-ca.p12 -list

    При запросе введите пароль хранилища доверенных центров сертификации.

    Вывод должен содержать как существующий сертификат центра сертификации, так и ваш новый сертификат. Если вы ранее использовали инструмент elasticsearch-certutil для генерации хранилища ключей, псевдоним старого центра сертификации по умолчанию ca, а тип записи — PrivateKeyEntry.

Сгенерировать новый сертификат для каждого узла в вашем кластере

Теперь, когда ваше хранилище доверенных центров сертификации обновлено, используйте ваш новый сертификат центра сертификации для подписи сертификата для ваших узлов.

Если ваша организация имеет собственный центр сертификации, вам потребуется сгенерировать запросы на сертификат (CSR). CSR содержат информацию, которую ваш центр сертификации использует для генерации и подписи сертификата безопасности.

  1. Используя новый сертификат и ключ центра сертификации, создайте новый сертификат для ваших узлов.

    ./bin/elasticsearch-certutil cert --ca-cert ca/ca.crt --ca-key ca/ca.key
    Параметры команды
    --ca-cert
    Указывает путь к вашему новому сертификату центра сертификации (ca.crt) в формате PEM. Вы также должны указать параметр --ca-key.
    --ca-key
    Указывает путь к закрытому ключу (ca.key) вашего сертификата центра сертификации. Вы также должны указать параметр --ca-cert.
    1. Введите имя выходного файла или примите значение по умолчанию elastic-certificates.p12.
    2. При запросе введите пароль для сертификата вашего узла.
  2. На текущем узле вашего кластера, где вы обновляете хранилище ключей, запустите поэтапную перезагрузку.

    Остановитесь на шаге, где указано Выполните необходимые изменения, а затем переходите к следующему шагу этой процедуры.

  3. Замените существующее хранилище ключей новым хранилищем ключей, убедившись, что имена файлов совпадают. Например, elastic-certificates.p12.

    Если ваш пароль хранилища ключей меняется, сохраните хранилище ключей с новым именем файла, чтобы Elasticsearch не пытался перезагрузить файл перед обновлением пароля.

  4. Если вам нужно сохранить новое хранилище ключей с новым именем файла, обновите файл ES_PATH_CONF/elasticsearch.yml, чтобы использовать имя файла нового хранилища ключей. Например:

    xpack.security.transport.ssl.keystore.path: config/elastic-certificates.p12
    xpack.security.transport.ssl.keystore.type: PKCS12
    xpack.security.transport.ssl.truststore.path: config/elastic-stack-ca.p12
    xpack.security.transport.ssl.truststore.type: PKCS12
  5. Запустите узел, на котором вы обновили хранилище ключей.
  6. (Необязательно) Используйте API сертификатов SSL для проверки того, что Elasticsearch загрузил новое хранилище ключей.

    GET /_ssl/certificates
  7. Если вы обновляете только сертификаты для транспортного уровня (а не уровня HTTP), выполните шаги с 2 по 6 по одному узлу за раз, пока вы не обновите все хранилища ключей в вашем кластере. Затем вы можете выполнить оставшиеся шаги для поэтапной перезагрузки.

    В противном случае не выполняйте поэтапную перезагрузку. Вместо этого переходите к шагам по генерации нового сертификата для уровня HTTP.

  8. (Необязательно) После замены хранилищ ключей на каждом узле вашего кластера, перечислите сертификаты в вашем хранилище доверенных центров сертификации, а затем удалите старый сертификат центра сертификации.

    Если вы ранее использовали инструмент elasticsearch-certutil для генерации хранилища ключей, псевдоним старого центра сертификации по умолчанию ca, а тип записи — PrivateKeyEntry.

    keytool -delete -noprompt -alias ca  -keystore config/elastic-stack-ca.p12 \
    -storepass <password>
    Параметры команды
    -alias
    Имя псевдонима хранилища ключей для старого сертификата центра сертификации, который вы хотите удалить из хранилища доверенных центров сертификации.

Что дальше?

Отлично! Вы обновили хранилище ключей для транспортного уровня. Вы также можете обновить хранилище ключей для уровня HTTP, если это необходимо. Если вы не обновляете хранилище ключей для уровня HTTP, то все готово.

Генерация нового сертификата для HTTP-слоя

Вы можете сгенерировать сертификаты для HTTP-слоя, используя ваш новый сертификат CA и приватный ключ. Другие компоненты, такие как Kibana или любые клиенты Elastic на языках программирования, проверяют этот сертификат при подключении к Elasticsearch.

Если ваша организация имеет собственный центр сертификации (CA), вам потребуется сгенерировать запросы на подписание сертификатов (CSR). CSR содержат информацию, которую ваш CA использует для генерации и подписания сертификата безопасности вместо использования самоподписанных сертификатов, которые генерирует инструмент elasticsearch-certutil.

Обновление клиентов для доверия новому CA

После генерации (но перед использованием) новых сертификатов для HTTP-слоя, вам необходимо обновить все клиенты, которые подключаются к Elasticsearch (например, Beats, Logstash и любые клиенты на языках программирования), и настроить их на доверие новому CA (ca.crt), который вы сгенерировали.

Этот процесс отличается для каждого клиента, поэтому обратитесь к документации вашего клиента для информации о доверие сертификатам. Вы обновите шифрование HTTP между Kibana и Elasticsearch после генерации необходимых сертификатов в этой процедуре.

  1. На любом узле вашего кластера, где установлен Elasticsearch, запустите инструмент сертификации Elasticsearch HTTP.

    ./bin/elasticsearch-certutil http

    Эта команда сгенерирует файл .zip, содержащий сертификаты и ключи для использования с Elasticsearch и Kibana. В каждой папке находится файл README.txt, описывающий, как использовать эти файлы.

    1. При запросе о желании сгенерировать CSR, введите n.
    2. При запросе о желании использовать существующий CA, введите y.
    3. Введите абсолютный путь к вашему новому сертификату CA, например, путь к файлу ca.crt.
    4. Введите абсолютный путь к вашему новому приватному ключу CA, например, путь к файлу ca.key.
    5. Введите срок действия для вашего сертификата. Вы можете указать срок действия в годах, месяцах или днях. Например, введите 1y для одного года.
    6. При запросе о желании сгенерировать один сертификат на узел, введите y.

      Каждый сертификат будет иметь свой собственный приватный ключ и будет выпущен для конкретного имени хоста или IP-адреса.

    7. При запросе укажите имя первого узла вашего кластера. Используйте то же имя узла, что и значение для параметра node.name в файле elasticsearch.yml.
    8. Введите все имена хостов, используемые для подключения к вашему первому узлу. Эти имена хостов будут добавлены в поле Subject Alternative Name (SAN) вашего сертификата.

      Перечислите все имена хостов и варианты, используемые для подключения к вашему кластеру по протоколу HTTPS.

    9. Введите IP-адреса, которые клиенты могут использовать для подключения к вашему узлу.
    10. Повторите эти шаги для каждого дополнительного узла в вашем кластере.
  2. После генерации сертификата для каждого из ваших узлов, введите пароль для вашего хранилища ключей при запросе.
  3. Разархивируйте сгенерированный файл elasticsearch-ssl-http.zip. Этот сжатый файл содержит одну директорию как для Elasticsearch, так и для Kibana. Внутри директории /elasticsearch находится директория для каждого узла с собственным файлом http.p12. Например:

    /node1
    |_ README.txt
    |_ http.p12
    |_ sample-elasticsearch.yml
    /node2
    |_ README.txt
    |_ http.p12
    |_ sample-elasticsearch.yml
    /node3
    |_ README.txt
    |_ http.p12
    |_ sample-elasticsearch.yml
  4. При необходимости переименуйте каждый файл http.p12, чтобы он соответствовал имени вашего существующего сертификата для HTTP-клиентских коммуникаций. Например, node1-http.p12.
  5. На текущем узле вашего кластера, где вы обновляете хранилище ключей, запустите поэтапную перезагрузку.

    Остановитесь на шаге, указывающем Выполните необходимые изменения, а затем переходите к следующему шагу в этой процедуре.

  6. Замените ваше существующее хранилище ключей новым, убедившись, что имена файлов совпадают. Например, node1-http.p12.

    Если у вас меняется пароль хранилища ключей, сохраните хранилище ключей с новым именем файла, чтобы Elasticsearch не пытался перезагрузить файл до того, как вы обновите пароль.

  7. Если вам нужно было сохранить новое хранилище ключей с новым именем файла, обновите файл ES_PATH_CONF/elasticsearch.yml, чтобы использовать имя нового хранилища ключей. Например:

    xpack.security.http.ssl.enabled: true
    xpack.security.http.ssl.keystore.path: node1-http.p12
  8. Если у вас меняется пароль хранилища ключей, добавьте пароль для вашего приватного ключа в защищенные настройки Elasticsearch.
    ./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
  9. Запустите узел, на котором вы обновили хранилище ключей.

    Используйте API cat nodes для подтверждения, что узел присоединился к кластеру:

    GET _cat/nodes
  10. (Необязательно) Используйте API сертификатов SSL для проверки того, что Elasticsearch загрузил новое хранилище ключей.

    GET /_ssl/certificates
  11. По одному узлу, выполните шаг 5 по шаг 10, пока не обновите все хранилища ключей в вашем кластере.
  12. Выполните оставшиеся шаги по поэтапной перезагрузке, начиная с шага Включить повторное распределение фрагментов.

Что дальше?

Отлично! Вы обновили хранилище ключей для HTTP-слоя. Теперь вы можете обновить шифрование между Kibana и Elasticsearch.

Обновление шифрования между Kibana и Elasticsearch

Когда вы запустили инструмент elasticsearch-certutil с опцией http, он создал директорию /kibana, содержащую файл elasticsearch-ca.pem. Вы используете этот файл для настройки Kibana на доверие CA Elasticsearch для HTTP-слоя.

  1. Скопируйте файл elasticsearch-ca.pem в директорию конфигурации Kibana, как определено путем KBN_PATH_CONF.

    KBN_PATH_CONF содержит путь к файлам конфигурации Kibana. Если вы установили Kibana с помощью архивов (zip или tar.gz), путь по умолчанию KBN_HOME/config. Если вы использовали пакетные дистрибутивы (Debian или RPM), путь по умолчанию /etc/kibana.

  2. Если вы изменили имя файла для файла elasticsearch-ca.pem, отредактируйте kibana.yml и обновите конфигурацию, чтобы указать расположение сертификата безопасности для HTTP-слоя.

    elasticsearch.ssl.certificateAuthorities: KBN_PATH_CONF/elasticsearch-ca.pem
  3. Перезапустите Kibana.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/update-node-certs-different.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API