Обновление сертификатов с тем же центром сертификации
Эта процедура предполагает, что у вас есть доступ к сертификату и ключу центра сертификации, который изначально был сгенерирован (или каким-либо другим образом хранится вашей организацией) и использовался для подписи сертификатов узлов, которые сейчас используются. Она также предполагает, что клиенты, подключающиеся к Elasticsearch на HTTP-уровне, настроены на доверие сертификату центра сертификации.
Если у вас есть доступ к центру сертификации, используемому для подписи ваших существующих сертификатов, вам нужно только заменить сертификаты и ключи для каждого узла в вашем кластере. Если вы замените свои существующие сертификаты и ключи на каждом узле и используете те же имена файлов, Elasticsearch перезагрузит файлы, начнёт использовать новые сертификаты и ключи.
Вам не нужно перезапускать каждый узел, но это принудительно создаст новые TLS-соединения и является рекомендуемой практикой при обновлении сертификатов. Поэтому следующие шаги включают перезапуск узла после обновления каждого сертификата.
В следующих шагах приведены инструкции по генерации новых сертификатов и ключей узлов для транспортного уровня и HTTP-уровня. Возможно, вам потребуется заменить сертификаты только одного из этих уровней в зависимости от того, какие из ваших сертификатов истекают.
Если ваш хранилище ключей защищено паролем, пароль хранится в безопасных настройках Elasticsearch, и пароль нужно изменить, то необходимо выполнить поэтапный перезапуск вашего кластера. Вам также необходимо использовать другое имя файла для хранилища ключей, чтобы Elasticsearch не перезагрузил файл до перезапуска узла.
Если ваш центр сертификации изменился, выполните шаги в статье об обновлении сертификатов безопасности с другим центром сертификации.
Генерация нового сертификата для транспортного уровня
В следующих примерах используются файлы 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 cert --ca elastic-stack-ca.p12
Параметры команды
-
--ca <ca_file> - Имя хранилища ключей центра сертификации, используемого для подписи ваших сертификатов. Если вы использовали инструмент
elasticsearch-certutilдля генерации вашего существующего центра сертификации, имя хранилища ключей по умолчаниюelastic-stack-ca.p12.
- Введите имя выходного файла или примите значение по умолчанию
elastic-certificates.p12. - При запросе введите пароль для хранилища ключей узла.
-
-
Если вы ввели пароль при создании хранилища ключей узла, который отличается от текущего пароля хранилища ключей, выполните следующую команду, чтобы сохранить пароль в хранилище ключей Elasticsearch:
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
-
На текущем узле вашего кластера, где вы обновляете хранилище ключей, запустите поэтапный перезапуск.
Остановитесь на шаге, указывающем Выполните необходимые изменения, а затем перейдите к следующему шагу этой процедуры.
-
Замените ваше существующее хранилище ключей новым хранилищем ключей, убедившись, что имена файлов совпадают. Например,
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-уровня), выполните шаги от шага 4 до шага 8 по одному узлу за раз, пока не обновите все хранилища ключей в вашем кластере. Затем вы можете выполнить оставшиеся шаги по поэтапному перезапуску.
В противном случае не выполняйте поэтапный перезапуск. Вместо этого перейдите к шагам по генерации нового сертификата для HTTP-уровня.
Что дальше?
Отлично! Вы обновили хранилище ключей для транспортного уровня. Вы также можете обновить хранилище ключей для HTTP-уровня, если это необходимо. Если вы не обновляете хранилище ключей для HTTP-уровня, то всё готово.
Генерация нового сертификата для HTTP-слоя
Другие компоненты, такие как Kibana или любые клиенты Elastic на языках программирования, проверяют этот сертификат при подключении к Elasticsearch.
Если ваша организация имеет собственный центр сертификации (ЦС), вам потребуется сгенерировать запросы на подписание сертификатов (CSR). CSR содержат информацию, используемую вашим ЦС для генерации и подписания сертификата.
-
На любом узле вашего кластера, где установлен Elasticsearch, запустите инструмент Elasticsearch HTTP-сертификатов.
./bin/elasticsearch-certutil http
Эта команда сгенерирует файл
.zip, содержащий сертификаты и ключи для использования с Elasticsearch и Kibana. В каждой папке находится файлREADME.txt, объясняющий, как использовать эти файлы.- Когда вас спросят, хотите ли вы сгенерировать CSR, введите
n. - Когда вас спросят, хотите ли вы использовать существующий ЦС, введите
y. - Введите абсолютный путь к вашему ЦС, например, путь к файлу
elastic-stack-ca.p12. - Введите пароль для вашего ЦС.
- Введите значение срока действия для вашего сертификата. Вы можете указать срок действия в годах, месяцах или днях. Например, введите
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, пока не обновите все хранилища ключей в вашем кластере.
- Выполните оставшиеся шаги для поэтапной перезагрузки, начиная с шага Возобновить распределение фрагментов.
© 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