Elasticsearch. Настройка SSL-сертификатов
Введение
Для работы ПО Comindware Platform требуется сервер OpenSearch (Elasticsearch).
Здесь представлены инструкции по формированию SSL-сертификатов подлинности узлов и настройке Elasticsearch с проверкой сертификатов подлинности.
Перед выполнением этих инструкций необходимо развернуть Elasticsearch без сертификатов подлинности.
Дальнейшие инструкции предполагают, что кластер и служба Elasticsearch развёрнуты согласно инструкциям в статье «Elasticsearch. Развёртывание без сертификатов подлинности» на виртуальных машинах с Linux.
Настройка OpenSearch
Настроить сертификаты подлинности для OpenSearch можно аналогичным образом, при необходимости скорректировав шаги в соответствии с особенностями OpenSearch и вашей конкретной конфигурации.
Формирование SSL-сертификатов
Установка Open SSL
-
Проверьте, установлен ли пакет
opensslв операционной системе:-
Для дистрибутивов на базе Debian:
dpkg --list | grep openssl -
Для дистрибутивов на базе RHEL:
dnf list installed | grep openssl
-
-
При необходимости перед установкой OpenSSL обновите ПО:
sudo apt updatesudo apt upgrade -
Установите OpenSSL (для дистрибутивов на базе Debian; для других дистрибутивов используйте соответствующий менеджер пакетов):
sudo apt install openssl
Формирование сертификата СА
-
В домашней директории пользователя
<username>создайте директорию для выполнения дальнейших операций (например,certsGen):mkdir certsGen -
Перейдите в директорию
certsGen:cd certsGen/ -
Создайте закрытый ключ
ca-key.pemдля центра сертификации (CA):openssl genpkey -out ca-key.pem -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -
Создайте сертификат СА
ca.pem:openssl req -new -x509 -sha256 -key ca-key.pem -out ca.pem -days 3650 -subj "/CN=ElasticSearchCA" -
В результате вы получите:
- файл
ca-key.pem— закрытый ключ центра сертификации; - файл
ca.pem— сертификат центра сертификации.
- файл
Формирование ключей и сертификатов для узлов кластера Elasticsearch
Для примера далее используется один узел Elasticsearch. Для дополнительных узлов повторите шаги, подставив фактические IP‑адреса вместо <XXX.XXX.XXX.XXX>.
-
Создайте закрытый ключ узла
elastic-key.pem:openssl genpkey -out elastic-key.pem -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -
Создайте файл описания узла
openssl.cnfсо следующим содержимым (подставьте фактический IP‑адрес узла Elasticsearch вместо<XXX.XXX.XXX.XXX>):[ req ]distinguished_name = req_distinguished_namereq_extensions = req_extprompt = no[ req_distinguished_name ]CN = <XXX.XXX.XXX.XXX>[ req_ext ]subjectAltName = @alt_names[ alt_names ]IP.1 = <XXX.XXX.XXX.XXX> -
Используя файл описания
openssl.cnfи ключ узлаelastic-key.pem, создайте запрос на сертификат (CSR)elastic.csr:openssl req -new -key elastic-key.pem -out elastic.csr -config openssl.cnf -
Используя CSR, сертификат CA и закрытый ключ CA, создайте подписанный CA сертификат узла Elasticsearch
elastic-cert.pem:openssl x509 -req -in elastic.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out elastic-cert.pem -days 365 -sha256 -extfile openssl.cnf -extensions req_ext -
Аналогично шагам 1–4 создайте ключи и сертификаты для остальных узлов Elasticsearch, указывая их IP‑адреса в
openssl.cnf.
Отправка созданных сертификатов на узлы кластера
-
Отправьте созданные сертификаты с помощью
SSH(подставьте свои имена файлов, имя пользователя вместо<username>и IP‑адрес вместо<XXX.XXX.XXX.XXX>):sudo scp ca.pem <username>@<XXX.XXX.XXX.XXX>:/home/<username>/sudo scp elastic-cert.pem <username>@<XXX.XXX.XXX.XXX>:/home/<username>/sudo scp elastic-key.pem <username>@<XXX.XXX.XXX.XXX>:/home/<username>/ -
На каждом из узлов перенесите сгенерированные файлы в директорию, из которой Elasticsearch будет считывать сертификаты (например,
/etc/elasticsearch/):sudo mv /home/<username>/ca.pem /etc/elasticsearch/sudo mv /home/<username>/elastic-cert.pem /etc/elasticsearch/sudo mv /home/<username>/elastic-key.pem /etc/elasticsearch/ -
Задайте владельца и права доступа к директории:
sudo chown elasticsearch:elasticsearch --recursive /etc/elasticsearch/sudo chmod 764 --recursive /etc/elasticsearch/
Настройка кластера Elasticsearch
Добавление сертификата CA в хранилище сертификатов ОС и Mono Framework
-
Добавьте сертификат CA в хранилище сертификатов операционной системы (пример для дистрибутивов на базе Debian):
sudo cp /etc/elasticsearch/ca.pem /usr/local/share/ca-certificates/ca.crtsudo update-ca-certificates -
Добавьте сертификат CA в хранилище сертификатов Mono Framework:
sudo mono /usr/lib/mono/4.5/cert-sync.exe /etc/elasticsearch/ca.pem
Настройка узла кластера для работы с SSL-сертификатами
-
Для каждого узла кластера Elasticsearch отредактируйте
yml-файл конфигурации Elasticsearch, как показано в примерах ниже. Внимательно следите за сохранением отступов:sudo nano /etc/elasticsearch/elasticsearch.yml -
Добавьте настройки SSL для узла Elasticsearch, указав фактические пути к созданным файлам
elastic-key.pem,elastic-cert.pemиca.pem:xpack.security.enabled: truexpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificatexpack.security.transport.ssl.key: /etc/elasticsearch/elastic-key.pemxpack.security.transport.ssl.certificate: /etc/elasticsearch/elastic-cert.pemxpack.security.transport.ssl.certificate_authorities: [ "/etc/elasticsearch/ca.pem" ]xpack.security.http.ssl.enabled: truexpack.security.http.ssl.key: /etc/elasticsearch/elastic-key.pemxpack.security.http.ssl.certificate: /etc/elasticsearch/elastic-cert.pemxpack.security.http.ssl.certificate_authorities: [ "/etc/elasticsearch/ca.pem" ] -
Ниже приведён пример файла
elasticsearch.ymlдля конфигурации с одним узлом. При необходимости адаптируйте параметрыcluster.name,node.name,http.hostи другие настройки в соответствии с вашей конфигурацией:#======================== Elasticsearch Configuration =========================cluster.name: my-application# ------------------------------------ Node ------------------------------------node.name: node-1# ----------------------------------- Paths ------------------------------------path.data: /var/lib/elasticsearch # database path Elasticsearchpath.logs: /var/log/elasticsearch # путь к файлам журнала Elasticsearch#path.repo: /var/backups/elasticsearch # путь к репозиторию резервных копий Elasticsearch# ----------------------------------- Memory -----------------------------------bootstrap.memory_lock: false# ---------------------------------- Network -----------------------------------# ниже указать IP сервера Elasticsearch или 127.0.0.1, если Elasticsearch и# Comindware Business Application Platform развёрнуты на одной машине#network.host: 127.0.0.1http.host: <XXX.XXX.XXX.XXX> # IP - слушать внешний интерфейс, 127.0.0.1 - localhost, 0.0.0.0 - всеhttp.port: 9200 # порт по умолчанию# --------------------------------- Discovery ----------------------------------discovery.type: single-node # директива для работы в режиме одного узла#discovery.seed_hosts: ["<XXX.XXX.XX.XXX>"] # директива для работы кластера#cluster.initial_master_nodes: ["<XXX.XXX.XX.XXX>"] # директива для работы кластера# ---------------------------------- Various -----------------------------------search.allow_expensive_queries: trueaction.destructive_requires_name: trueindices.id_field_data.enabled: true# ---------------------------------- Security ----------------------------------xpack.security.enabled: truexpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificatexpack.security.transport.ssl.key: /etc/elasticsearch/elastic-key.pemxpack.security.transport.ssl.certificate: /etc/elasticsearch/elastic-cert.pemxpack.security.transport.ssl.certificate_authorities: [ "/etc/elasticsearch/ca.pem" ]xpack.security.http.ssl.enabled: truexpack.security.http.ssl.key: /etc/elasticsearch/elastic-key.pemxpack.security.http.ssl.certificate: /etc/elasticsearch/elastic-cert.pemxpack.security.http.ssl.certificate_authorities: [ "/etc/elasticsearch/ca.pem" ] -
Сохраните изменения и закройте текстовый редактор Nano, нажав клавиши: ++ctrl+O++, Ввод, Ctrl+X.
- Повторите шаги 1–4 для каждого из узлов Elasticsearch.
Настройка параметров JVM для Elasticsearch
-
Откройте файл настроек JVM:
sudo nano /etc/elasticsearch/jvm.options -
Убедитесь, что параметры начального и максимального размера кучи заданы и не закомментированы (значения подберите в соответствии с объёмом доступной памяти сервера):
-Xms4g-Xmx4g -
Сохраните изменения и закройте файл.
Обновление хранилища сертификатов Linux и Mono Framework для сертификатов Elasticsearch
-
Добавьте сертификат CA и сертификат узла в хранилище сертификатов Mono Framework (команды выполняются после копирования файлов в
/etc/elasticsearch/):sudo mono /usr/lib/mono/4.5/cert-sync.exe /etc/elasticsearch/ca.pemsudo mono /usr/lib/mono/4.5/cert-sync.exe /etc/elasticsearch/elastic-cert.pem
Запуск Elasticsearch
Выполните следующие шаги для каждого узла Elasticsearch.
-
Перезагрузите конфигурацию
systemd:sudo systemctl daemon-reload -
Перезапустите процесс
elasticsearch.service:sudo systemctl restart elasticsearch.service -
Убедитесь, что процесс
elasticsearch.serviceзапустился:sudo systemctl status elasticsearch.serviceПример результата проверки статуса процесса elasticsearch.serviceelasticsearch.service - ElasticsearchLoaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2022-12-01 10:12:27 UTC; 6s agoDocs: <https://www.elastic.co>Main PID: 3597 (java)Tasks: 63 (limit: 4575)Memory: 629.9MCPU: 44.422sCGroup: /system.slice/elasticsearch.service├─3597 /usr/share/elasticsearch/jdk/bin/java -Xms4m -Xmx64m -XX:+UseSerialGC -Dcli.name=server -Dcli.scri>├─3656 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.n>└─3676 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controllerDec 01 10:11:12 penguin-02 systemd[1]: Starting Elasticsearch...Dec 01 10:12:27 penguin-02 systemd[1]: Started Elasticsearch.Примечание
В случае ошибок с запуском процесса
elasticsearch.serviceрекомендуется изучить файл журнала:sudo less /var/elasticsearch/logs/yourClusterName.log -
Повторите шаги 1–3 для каждого из узлов Elasticsearch.
Сброс пароля пользователя elastic
-
При необходимости сбросьте пароль для встроенного пользователя
elastic:sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -i -u elastic -
Следуйте интерактивным подсказкам утилиты и сохраните новый пароль.
Присвоение сертификату статуса доверенного
Перед проверкой состояния кластера необходимо присвоить новому источнику сертификата статус доверенного. Инструкции в данном разделе приведены для среды Windows 10.
- Откройте в файловом менеджере директорию с сертификатом.
- Откройте файл сертификата (например,
ca.pemили предварительно переименованный вCA.crt). - В отобразившемся окне нажмите кнопку «Установить сертификат».
- Выберите, следует ли хранить сертификат на уровне пользователя или на уровне машины.
- Нажмите кнопку «Далее».
- Выберите пункт «Разместить все сертификаты в следующем хранилище».
- Нажмите кнопку «Обзор».
- Выберите «Доверенные корневые источники сертификатов».
- Нажмите кнопку «ОК».
- Нажмите кнопку «Далее».
- Нажмите кнопку «Завершить».
- Если отобразится запрос, нажмите кнопку «Да».
Проверка состояния кластера
-
После того как для каждого из узлов кластера Elasticsearch были выполнены шаги, описанные в предыдущих разделах, с любого из узлов выполните
GET-запрос в веб-браузере:https://192.168.XXX.XX1:9200/_cluster/health?pretty -
Браузер отобразит форму для ввода учётных данных.
-
Введите имя встроенного суперпользователя
elasticи один из автоматически сгенерированных паролей, которые были созданы при развёртывании Elasticsearch.
Ввод учётных данных для доступа к кластеру Elasticsearch -
Браузер отобразит данные
REST APIкластера Elasticsearch. -
Убедитесь, что значение параметра
number_of_nodesравно количеству узлов кластера.
Данные REST API кластера Elasticsearch
Настройка прав доступа и диагностика неполадок
-
Убедитесь, что на необходимые каталоги выданы корректные права:
-
Назначьте владельца:
sudo chown -R elasticsearch:elasticsearch /var/lib/comindware/ -
Назначьте права доступа:
sudo chmod -R 766 /var/lib/comindware/
-
-
В случае возникновения проблем с библиотекой
jna-5.10.0.jarили других ошибок в работе Elasticsearch изучите журналы:journalctl -xetail -f /var/log/comindware/instanceName/Logs/audit_0000-00-00.lognano /var/log/comindware/instanceName/Logs/audit_0000-00-00.logcat /var/elasticsearch/logs/elasticsearch.example.cbap.log
Эта статья была полезна 1 чел.