Spec-Zone.ru › Elasticsearch 8
›Руководство по Elasticsearch [8.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 новое хранилище ключей.

    resp = client.ssl.certificates()
    print(resp)
    const response = await client.ssl.certificates();
    console.log(response);
    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. Введите все имена хостов, используемые для подключения к вашему первому узлу. Эти имена хостов будут добавлены в качестве 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. Выполните оставшиеся шаги по поэтапной перезагрузке, начиная со шага Восстановить распределение фрагментов.

Что дальше?

Отлично! Вы обновили хранилище ключей для 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/8.17/update-node-certs-different.html

Spec-Zone.ru

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