Обновление сертификатов безопасности с использованием другого удостоверяющего центра
Если необходимо довериться новому удостоверяющему центру (УЦ) вашей организации или нужно сгенерировать новый УЦ самостоятельно, используйте этот новый УЦ для подписания новых сертификатов узлов и укажите узлам доверять новому УЦ.
Генерация нового сертификата для транспортного уровня
Создайте новый сертификат УЦ или получите сертификат УЦ вашей организации и добавьте его в существующий хранилище доверенных сертификатов. После обновления сертификатов на всех узлах вы можете удалить старый сертификат УЦ из хранилища (но не раньше!).
В следующих примерах используются файлы PKCS#12, но те же шаги применимы и к хранилищам ключей JKS.
-
Откройте файл
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
-
На любом узле вашего кластера сгенерируйте новый сертификат УЦ. Вам нужно выполнить этот шаг только один раз. Если вы используете сертификат УЦ своей организации, пропустите этот шаг.
./bin/elasticsearch-certutil ca --pem
Параметры команды
-
--pem - Генерирует каталог, содержащий сертификат УЦ и ключ в формате PEM вместо PKCS#12.
- Введите имя сжатого выходного файла, который будет содержать ваш сертификат и ключ, или примите имя по умолчанию
elastic-stack-ca.zip. -
Разархивируйте выходной файл. Полученный каталог содержит сертификат УЦ (
ca.crt) и закрытый ключ (ca.key).Храните эти файлы в безопасном месте, так как они содержат закрытый ключ вашего УЦ.
-
-
На каждом узле вашего кластера импортируйте новый сертификат
ca.crtУЦ в существующее хранилище доверенных сертификатов. Этот шаг гарантирует, что ваш кластер доверяет новому сертификату УЦ. В этом примере используется утилита Javakeytoolдля импорта сертификата в хранилище доверенных сертификатов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 - Имя нового сертификата УЦ для импорта.
-
-
Проверьте, был ли добавлен новый сертификат УЦ в ваше хранилище доверенных сертификатов.
keytool -keystore config/elastic-stack-ca.p12 -list
При запросе введите пароль для хранилища доверенных сертификатов УЦ.
Вывод должен содержать как существующий сертификат УЦ, так и ваш новый сертификат. Если вы ранее использовали инструмент
elasticsearch-certutilдля генерации хранилища ключей, псевдоним старого УЦ по умолчанию являетсяca, а тип записи —PrivateKeyEntry.
Создать новый сертификат для каждого узла в кластере
Теперь, когда хранилище доверенных сертификатов УЦ обновлено, используйте новый сертификат УЦ для подписания сертификата для ваших узлов.
Если у вашей организации есть свой УЦ, вам необходимо сгенерировать запросы на подпись сертификатов (CSR). CSR содержат информацию, которую ваш УЦ использует для генерации и подписания сертификата безопасности.
-
Используя новый сертификат УЦ и ключ, создайте новый сертификат для своих узлов.
./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.
- Введите имя выходного файла или примите имя по умолчанию
elastic-certificates.p12. - При запросе введите пароль для сертификата узла.
-
-
На текущем узле в вашем кластере, где вы обновляете хранилище ключей, запустите поэтапную перезагрузку.
Остановитесь на шаге, указывающем Выполнение необходимых изменений, а затем переходите к следующему шагу в этой процедуре.
-
Замените существующее хранилище ключей новым хранилищем ключей, убедившись, что имена файлов совпадают. Например,
elastic-certificates.p12.Если пароль хранилища ключей меняется, сохраните хранилище ключей с новым именем файла, чтобы Elasticsearch не пытался перезагрузить файл перед обновлением пароля.
-
Если вам нужно было сохранить новое хранилище ключей с новым именем файла, обновите файл
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
- Запустите узел, на котором вы обновили хранилище ключей.
-
(Необязательно) Используйте API сертификатов SSL, чтобы проверить, загрузило ли Elasticsearch новое хранилище ключей.
resp = client.ssl.certificates() print(resp)
const response = await client.ssl.certificates(); console.log(response);
GET /_ssl/certificates
-
Если вы обновляете только сертификаты для транспортного уровня (а не для HTTP-уровня), выполните шаги 2–6 по одному узлу за раз, пока не обновите все хранилища ключей в вашем кластере. Затем вы можете выполнить оставшиеся шаги для поэтапной перезагрузки.
В противном случае не выполняйте поэтапную перезагрузку. Вместо этого перейдите к шагам по генерации нового сертификата для HTTP-уровня.
-
(Необязательно) После замены хранилищ ключей на каждом узле в вашем кластере, перечислите сертификаты в вашем хранилище доверенных сертификатов, а затем удалите старый сертификат УЦ.
Если вы ранее использовали инструмент
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.
-
На любом узле вашего кластера, где установлен Elasticsearch, запустите инструмент Elasticsearch HTTP-сертификатов.
./bin/elasticsearch-certutil http
Эта команда сгенерирует файл
.zip, который содержит сертификаты и ключи для использования с Elasticsearch и Kibana. Каждый каталог содержит файлREADME.txt, объясняющий, как использовать эти файлы.- При запросе о желании сгенерировать CSR, введите
n. - При запросе о желании использовать существующий CA, введите
y. - Введите абсолютный путь к вашему новому сертификату CA, например, путь к файлу
ca.crt. - Введите абсолютный путь к вашему новому приватному ключу CA, например, путь к файлу
ca.key. - Введите срок действия вашего сертификата. Вы можете ввести период действия в годах, месяцах или днях. Например, введите
1yдля одного года. -
При запросе о желании сгенерировать по одному сертификату на узел, введите
y.Каждый сертификат будет иметь свой собственный приватный ключ и будет выдан для конкретного имени хоста или IP-адреса.
- При запросе введите имя первого узла в вашем кластере. Используйте то же имя узла, что и значение параметра
node.nameв файлеelasticsearch.yml. -
Введите все имена хостов, используемые для подключения к вашему первому узлу. Эти имена хостов будут добавлены в качестве DNS-имен в поле Subject Alternative Name (SAN) вашего сертификата.
Перечислите все имена хостов и их варианты, используемые для подключения к вашему кластеру по HTTPS.
- Введите IP-адреса, которые клиенты могут использовать для подключения к вашему узлу.
- Повторите эти шаги для каждого дополнительного узла в вашем кластере.
- При запросе о желании сгенерировать CSR, введите
- После генерации сертификата для каждого вашего узла, введите пароль для вашего хранилища ключей при запросе.
-
Распакуйте сгенерированный файл
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
- При необходимости переименуйте каждый файл
http.p12, чтобы он соответствовал имени вашего существующего сертификата для HTTP-клиентских коммуникаций. Например,node1-http.p12. -
На текущем узле вашего кластера, где вы обновляете хранилище ключей, запустите поэтапную перезагрузку.
Остановитесь на шаге, указывающем Выполните все необходимые изменения, а затем переходите к следующему шагу в этой процедуре.
-
Замените ваше существующее хранилище ключей новым хранилищем ключей, убедившись, что имена файлов совпадают. Например,
node1-http.p12.Если пароль вашего хранилища ключей меняется, сохраните хранилище ключей с новым именем файла, чтобы Elasticsearch не пытался перезагрузить файл, прежде чем вы обновите пароль.
-
Если вам нужно было сохранить новое хранилище ключей с новым именем файла, обновите файл
ES_PATH_CONF/elasticsearch.yml, чтобы использовать имя файла нового хранилища ключей. Например:xpack.security.http.ssl.enabled: true xpack.security.http.ssl.keystore.path: node1-http.p12
-
Если пароль вашего хранилища ключей меняется, добавьте пароль к вашему приватному ключу в защищённые настройки Elasticsearch.
./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
- Запустите узел, на котором вы обновили хранилище ключей.
Используйте 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
-
(Необязательно) Используйте API сертификатов SSL, чтобы проверить, что Elasticsearch загрузил новое хранилище ключей.
resp = client.ssl.certificates() print(resp)
const response = await client.ssl.certificates(); console.log(response);
GET /_ssl/certificates
- По одному узлу, выполните шаги 5 по 10, пока вы не обновите все хранилища ключей в вашем кластере.
- Выполните оставшиеся шаги по поэтапной перезагрузке, начиная со шага Восстановить распределение фрагментов.
Что дальше?
Отлично! Вы обновили хранилище ключей для HTTP-слоя. Теперь вы можете обновить шифрование между Kibana и Elasticsearch.
Обновление шифрования между Kibana и Elasticsearch
Когда вы запустили инструмент elasticsearch-certutil с опцией http, он создал каталог /kibana, содержащий файл elasticsearch-ca.pem. Вы используете этот файл для настройки Kibana на доверие к CA Elasticsearch для HTTP-слоя.
-
Скопируйте файл
elasticsearch-ca.pemв каталог конфигурации Kibana, как определено путемKBN_PATH_CONF.KBN_PATH_CONFсодержит путь к файлам конфигурации Kibana. Если вы установили Kibana с помощью дистрибутивов архивов (zipилиtar.gz), путь по умолчанию равенKBN_HOME/config. Если вы использовали дистрибутивы пакетов (Debian или RPM), путь по умолчанию равен/etc/kibana. -
Если вы изменили имя файла для файла
elasticsearch-ca.pem, отредактируйтеkibana.ymlи обновите конфигурацию, чтобы указать расположение сертификата безопасности для HTTP-слоя.elasticsearch.ssl.certificateAuthorities: KBN_PATH_CONF/elasticsearch-ca.pem
- Перезапустите 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