Сервис Elasticsearch в облаке Tencent начал предоставлять нам кластеры Elasticsearch на основе доступа по протоколу HTTPS Elastic; Служба Cloud Elasticsearch по умолчанию всегда использовала протокол безопасности HTTPS. И наш собственный кластер Elasticsearch,Начиная с версии 8.0,Функции безопасности также упрощены по умолчанию.,для пользователейАвтоматическая конфигурация:Аутентификация пользователя、Управление доступом на основе ролей для авторизации пользователей、использовать TLS Зашифрованная связь между узлами, использование HTTPS и Elasticsearch API Осуществлять зашифрованную связь.
Почему нам нужно это делатьсложныйконфигурация безопасности,И включить SSL/TLS для аутентификации и шифрования сообщений для служб Elasticsearch?
Потому что это поможет нам получить:
В целом, настройка кластера Elasticsearch на использование HTTPS и TLS может улучшить защиту и безопасность ваших данных и является важной мерой безопасности в любой ситуации, когда требуется конфиденциальность данных.
Хотя мы понимаем важность конфигурации безопасности, нелегко понять, почему это так, особенно когда речь идет о различных сертификатах CA, сертификатах, открытых ключах, секретных ключах и числах, связанных с этими конфигурациями безопасности, отпечатками пальцев сертификатов (finger). отпечатки), и выяснение связи между ними обычно вызывает у нас головокружение.
В этой статье мы попытаемся проанализировать различные концепции настройки зашифрованной связи в Elasticsearch, чтобы понять, как настроить соответствующие конфигурации безопасности для удовлетворения потребностей безопасности нашей производственной среды.
HTTPS (безопасный протокол передачи гипертекста) — это безопасный протокол HTTP, который использует протоколы SSL (Secure Sockets Layer) или TLS (Transport Layer Security) для шифрования и аутентификации данных для защиты безопасности сетевых коммуникаций.
Вот некоторые важные концепции HTTPS:
При настройке безопасной связи кластера Elasticsearch мы будем использовать упомянутые выше элементы для проверки аутентификации сервера и клиента, а также шифрования и целостности связи.
Когда мы настраиваем безопасную связь кластера Elasticsearch,Связь TLS между узлами кластера необходимо настраивать отдельно.,А также HTTPS-связь для клиентов и кластеров.
Теперь предположим, что у нас есть многоузловой кластер, и Kibana и Logstash должны взаимодействовать с кластером. Поэтому будут аналогичные роли, которые необходимо настроить:
[root@node1 cert_blog]# vi ~/tmp/cert_blog/instance.yml
# add the instance information to yml file
instances:
- name: 'node1'
dns: [ 'node1.elastic.test.com' ]
- name: "node2"
dns: [ 'node2.elastic.test.com' ]
- name: 'my-kibana'
dns: [ 'kibana.local' ]
- name: 'logstash'
dns: [ 'logstash.local' ]
然назадиспользовать配套изelasticsearch-certutil
инструменты для создания соответствующих Сертификат ЦСи Сертификат сервера。
[root@node1 elasticsearch]# bin/elasticsearch-certutil cert --keep-ca-key --pem --in ~/tmp/cert_blog/instance.yml --out ~/tmp/cert_blog/certs.zip
После распаковки certs.zip появится следующий каталог и файлы:
├── ca
│ ├── ca.crt
│ └── ca.key
├── ca.zip
├── certs2.zip
├── node1
│ ├── node1.crt
│ └── node1.key
├── node2
│ ├── node2.crt
│ └── node2.key
├── my-kibana
│ ├── my-kibana.crt
│ └── my-kibana.key
├── logstash
│ ├── logstash.crt
│ └── logstash.key
среди них,ca.crt
то естьElasticsearchсамоподписавшийсяСертификат ЦС,и es01.crt
、 es02.crt
、my-kibana.crt
、logstash.crt
ждать,Они все этим пользуютсяca.crt
Соответствующийca.key
изданныйСертификат сервера。
Будьте конкретны,ca.key
иca.crt
даиспользовать于生成и签发Сертификат сервераизCA(Certificate Центр сертификации — закрытый и открытый ключи центра сертификации. Центр сертификации — это доверенный объект, используемый для выдачи сертификатов сервера. Он используется для проверки личности владельца сертификата и цифровой подписи сертификата, чтобы гарантировать целостность и подлинность сертификата во время передачи.
ca.key
даCAиз私钥,Используется для сертификата сервераруководитьцифровая подпись。Обычно должен состоять только изCAдоступ владельца,Потому что с его помощью можно выдать любой Сертификат.,и считать его надежным сертификатом. поэтому,Если закрытый ключ скомпрометирован или утерян,Это сделает все выданные сертификаты ненадежными. То есть,вышеиз Сертификат сервера(например,node1.crt
)内изцифровая подпись,то естьиспользоватьca.key
来加密изданный。
ca.crt
даCAиз公钥Сертификат,Используется для проверки подлинности и целостности Сертификата сервера.。Сертификатвключен вCAиз公钥,и данные подписи. При проверке Сертификата сервера,接收方可以использоватьca.crt
проверить Сертификатиз签名да否可信。если заслуживает доверия,Вы можете подтвердить Сертификатиз真实性и完整性。например,Клиент привязываетсяnode1
час,node1из Сертификат сервераnode1.crt
内изцифровая подпись,将использоватьca.crt
中изCAиз公钥来руководить解密,如果解密出来из值да该Сертификат сервера(node1.crt
)из哈希值,Это указывает на то, что сервер заслуживает доверия.
поэтому,посмотрим,В конфигурации Кибаны,Нам нужно будет настроитьelasticsearch.ssl.certificateAuthorities
,Потому что нам это нужно, чтобы убедиться, что ES, на который мы ссылаемся, является тем ES, на который мы ожидаем ссылаться.
elasticsearch.username: "kibana"
elasticsearch.password: "<kibana_password>"
elasticsearch.ssl.certificateAuthorities: [ "/etc/kibana/config/certs/ca.crt" ]
Вышеизложенное является относительно поверхностным. Давайте подробно объясним основной процесс проверки сертификата CA идентичности узла ES и подлинности сертификата (сертификата сервера):
ca.crt
иca.key
генерироватьnode1.crt
node1.elastic.test.com
)、срок действия ицифровая подписьждать信息。Сертификат сервераизцифровая Подпись — пара закрытых ключей. Сертификат, используемый центром сертификации. Содержимое сервера шифруется и генерируется, это цифровая Подпись – залог подлинности Сертификата.。цифровая Подпись генерируется из открытого и закрытого ключей. Организация ЦС будет использовать свой собственный закрытый ключ в качестве Сертификата. сервераизцифровая Подписано подписью. Поэтому при проверке Сертификата сервере, вам необходимо сначала использовать пару открытых ключей организации ЦС цифровая Подпись расшифровывается и получает Сертификат хеш-значение сервера, а затем Сертификат Хэш-значение для серверов Сертификат сам сервер сравнивается, и если соответствует, то указывает, что сертификат сертификата Сервер выдан организацией CA и ему можно доверять. Если оно не соответствует, то Сертификат Сервер может быть подделан или подделан, и ему не следует доверять. Этот процесс можно выполнить через цепочку сертификатов (сертификат цепочка), то есть через проверку Сертификата сервераизцифровая Может ли подпись успешно соответствовать Сертификату агентства ICA для подтверждения Сертификата авторитет сервера.
Выше мы упоминали, что сертификат сервера содержит такую информацию, как открытый ключ, имя веб-сайта, срок действия и цифровую подпись. В частности, сертификат сервера содержит следующие основные части:
Например, содержимое сертификата сервера es01:
После декодирования base64 содержимое будет следующим:
Выше мы упоминали, что клиент имеет сертификат CA ES, а затем проверяет сертификат сервера узла с сертификатом CA ES, чтобы убедиться, что узел, к которому мы подключаемся, действительно является узлом кластера. Служит функцией аутентификации.
Но помимо функции аутентификации HTTPS/TLS также имеет функцию шифрования связи. Как это реализовано?
node1.crt
中из公钥)человеку, названному"Pre-master secret» шифруется и отправляется на сервер.node1.key
)верно其руководить解密,получать"Pre-master секрет". Далее и сервер, и клиент используют этот "Pre-master secret» генерирует файл под названием «Master секретный ключ», который будет использоваться для последующего шифрования связи.В этом процессе сертификат сервера играет роль проверки личности сервера и предоставления открытого ключа, а закрытый ключ используется для расшифровки данных, отправленных клиентом. В то же время два ключа «Предварительный главный секрет» и «Главный секрет» также играют роль в шифровании и дешифровании передаваемых данных. Вместе эти шаги гарантируют, что ваше HTTPS-соединение безопасно и конфиденциально.
В приведенной выше конфигурации мы видим, что node1 и node2 имеют свои собственные сертификаты сервера и закрытые ключи. Это связано с тем, что кластер ES состоит из узлов, и транспортная связь между узлами также должна основываться на протоколе TLS. При использовании уровня TLS Elasticsearch каждый узел должен иметь собственный сертификат и секретный ключ для обеспечения безопасности и конфиденциальности связи.
每个节点都有自己изIPадрес или имя хоста,需要использовать相应из Сертификати秘钥来идругие узлы или клиенты(transport клиент) для общения. Если все узлы используют один и тот же сертификат и ключ, конфиденциальность сертификата и ключа будет уничтожена, что сделает связь более небезопасной.
Поэтому при использовании уровня TLS Elasticsearch рекомендуется генерировать независимые сертификаты и ключи для каждого узла, чтобы обеспечить безопасность и конфиденциальность связи. Тот же сертификат ЦС можно использовать для создания сертификатов узлов, чтобы обеспечить надежность и согласованность сертификатов. В то же время вы также можете использовать автоматизированные инструменты для упрощения процесса управления и развертывания сертификатов и секретных ключей, например, с помощью инструмента автоматизации сертификатов, входящего в состав Elasticsearch, или стороннего инструмента управления сертификатами.
выше,мы упомянулиElasticsearch提供配套изelasticsearch-certutil
инструмент,создать самоподписанный Сертификат ЦС и используйте этот Сертификат для получения Сертификата. Выпуск и управление сервером.
В частности, вот шаги по использованию самозаверяющего сертификата ЦС для выдачи дополнительных сертификатов:
elasticsearch-certutil
Создайте самоподписанный сертификат ЦС。существовать Создать сертификатчас,Необходимо заполнить основную информацию,Например Сертификатиз名称、有效期限ждатьждать。Эту информацию предоставилelasticsearch-certutil
Создается автоматически для нас。xpack.security.enabled: true
xpack.security.http.ssl.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.http.ssl.key: certs/node1.key
xpack.security.http.ssl.certificate: certs/node1.crt
-> xpack.security.http.ssl.certificate_authorities: certs/ca.crt
xpack.security.transport.ssl.key: certs/node1.key
xpack.security.transport.ssl.certificate: certs/node1.crt
-> xpack.security.transport.ssl.certificate_authorities: certs/ca.crt
elasticsearch-certutil
Создайте Сертификатпросить,Запрос содержит открытый ключ сервера и некоторую базовую информацию.,Например, имя сервера, имя домена и т. д. Запрос обычно представляет собой файл, содержащий открытый ключ и информацию о сертификате.
например,./bin/elasticsearch-certutil cert \
--name node1 \
--ca-cert /path/to/ca/ca.crt \
--ca-key /path/to/ca/ca.key \
--dns your.host.name.here \
--ip 192.0.2.1 \
--pem
xpack.security.enabled: true
xpack.security.http.ssl.enabled: true
xpack.security.transport.ssl.enabled: true
-> xpack.security.http.ssl.key: certs/node1.key
-> xpack.security.http.ssl.certificate: certs/node1.crt
xpack.security.http.ssl.certificate_authorities: certs/ca.crt
-> xpack.security.transport.ssl.key: certs/node1.key
-> xpack.security.transport.ssl.certificate: certs/node1.crt
xpack.security.transport.ssl.certificate_authorities: certs/ca.crt
Следует отметить, что самозаверяющий сертификат ЦС может быть не таким надежным, как купленный сертификат ЦС стороннего производителя, с точки зрения безопасности, поскольку самозаверяющий сертификат ЦС не был проверен и сертифицирован сторонней организацией. Поэтому при использовании самозаверяющего сертификата ЦС необходимо обеспечить безопасность закрытого ключа, чтобы избежать злонамеренного использования или утечки сертификата.
мы видим,无论даbeats还даLogstashждатьинструмент,При подключении к ЕС,во избежание Преобразование самоподписанного сертификата ЦС拷贝到所有из采集端上,Мы выберемssl.verification_mode
Параметры настроены какnone
。это означает,Клиент будет выполнение Сертификат Верификация сервера.
Это разрешено и также известно как небезопасное соединение HTTPS. Однако без проверки сертификата сервера клиент может подвергнуться атаке «человек посередине», в результате чего передаваемые данные могут быть подделаны или украдены. Поэтому клиентам рекомендуется всегда проверять действительность сертификата сервера, чтобы обеспечить безопасную связь.
verification_mode 控制Сертификат Верификация сервера. Допустимые значения:
# full
Убедитесь, что предоставленный сертификат выдан доверенным органом. (CA) Подпишите и проверьте имя хоста сервера (или IP адрес) соответствует имени, указанному в Сертификате.
# strict
Убедитесь, что предоставленный сертификат выдан доверенным органом. (CA) Подпишите и проверьте имя хоста сервера (или IP адрес) соответствует имени, указанному в Сертификаты Subject Alternative Name Если пусто, возвращается ошибка.
# certificate
Убедитесь, что предоставленный сертификат выдан доверенным органом. (CA) Подписано, но не выполняет проверку имени хоста.
# none
Не выполнение Сертификат Верификация сервера. Этот режим отключает SSL/TLS имеет множество преимуществ с точки зрения безопасности, и его следует использовать только после тщательного рассмотрения. В основном он используется для решения TLS Временный механизм диагностики на случай ошибок; его использование в производственных средах настоятельно не рекомендуется.
Даже если клиент решит не проверять сертификат сервера, HTTPS все равно может обеспечить защиту зашифрованных сообщений. В этом случае шаги по шифрованию связи следующие:
Elastic Сертификат, используемый в облаке, выдается общедоступным центром сертификации, которому доверяют браузеры и операционные системы, поэтому вы можете использовать его напрямую с браузером или инструментами API и Elastic. Общайтесь с кластерами Elasticsearch в облаке без необходимости дополнительной проверки сертификата. К числу таких общедоступных центров сертификации относятся DigiCert, GlobalSign, Let's Известные сторонние центры сертификации, такие как Encrypt, имеют свои корни, предварительно установленные в операционных системах и браузерах. Это означает, что в иElastic При взаимодействии с Elasticsearch в облаке ваш инструмент API проверяет, ведет ли цепочка сертификатов к корневому сертификату одного из доверенных центров сертификации.
Теперь Elastic Cloud использует сертификат CA Let’s Encrypt.