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

Обновление сертификатов с тем же центром сертификации

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

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

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

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

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

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

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

В следующих примерах используются файлы 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 cert --ca elastic-stack-ca.p12
    Параметры команды
    --ca <ca_file>
    Имя хранилища ключей центра сертификации, используемого для подписи ваших сертификатов. Если вы использовали инструмент elasticsearch-certutil для генерации вашего существующего центра сертификации, имя хранилища ключей по умолчанию elastic-stack-ca.p12.
    1. Введите имя выходного файла или примите значение по умолчанию elastic-certificates.p12.
    2. При запросе введите пароль для хранилища ключей узла.
  3. Если вы ввели пароль при создании хранилища ключей узла, который отличается от текущего пароля хранилища ключей, выполните следующую команду, чтобы сохранить пароль в хранилище ключей Elasticsearch:

    ./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
  4. На текущем узле вашего кластера, где вы обновляете хранилище ключей, запустите поэтапный перезапуск.

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

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

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

  6. Если вам нужно было сохранить новое хранилище ключей с новым именем файла, обновите файл 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
  7. Запустите узел, на котором вы обновили хранилище ключей.
  8. (Необязательно) Используйте API сертификатов SSL, чтобы убедиться, что Elasticsearch загрузил новое хранилище ключей.

    resp = client.ssl.certificates()
    print(resp)
    const response = await client.ssl.certificates();
    console.log(response);
    GET /_ssl/certificates
  9. Если вы обновляете сертификаты только для транспортного уровня (а не для HTTP-уровня), выполните шаги от шага 4 до шага 8 по одному узлу за раз, пока не обновите все хранилища ключей в вашем кластере. Затем вы можете выполнить оставшиеся шаги по поэтапному перезапуску.

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

Что дальше?

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

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

Другие компоненты, такие как Kibana или любые клиенты Elastic на языках программирования, проверяют этот сертификат при подключении к Elasticsearch.

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

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

    ./bin/elasticsearch-certutil http

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

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

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

    7. При запросе введите имя первого узла в вашем кластере. Полезно использовать то же имя узла, что и значение параметра node.name в файле elasticsearch.yml.
    8. Введите все имена хостов, используемые для подключения к вашему первому узлу. Эти имена хостов будут добавлены как имена DNS в поле 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, чтобы подтвердить, что узел присоединился к кластеру:

    resp = client.cat.nodes()
    print(resp)
    response = client.cat.nodes
    puts response
    const response = await client.cat.nodes();
    console.log(response);
    GET _cat/nodes
  10. (Необязательно) Используйте API сертификатов SSL, чтобы проверить, что Elasticsearch загрузил новое хранилище ключей.

    resp = client.ssl.certificates()
    print(resp)
    const response = await client.ssl.certificates();
    console.log(response);
    GET /_ssl/certificates
  11. Один узел за другим, выполните шаг 5 до шага 10, пока не обновите все хранилища ключей в вашем кластере.
  12. Выполните оставшиеся шаги для поэтапной перезагрузки, начиная с шага Возобновить распределение фрагментов.

© 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/8.17/update-node-certs-same.html

Spec-Zone.ru

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