В Manticore 3.1.2 была добавлена поддержка шифрования данных между вашим приложением или другим клиентом (curl, браузер и т.д.) и демоном Manticore Search. Важно, чтобы это было включено, если вам нужно защитить ваши данные (запросы, ответы) от перехвата внутри вашей локальной сети и особенно если вы подключаетесь к Manticore Search через интернет. Настройка требует использования сертификатов. Ниже приведен только пример того, как это можно сделать с самоподписанными сертификатами, могут быть и другие варианты, такие как покупка сертификатов, подписанных реальным УЦ.
В этом руководстве мы изучим, как использовать SSL в работе с Manticore Search.
В случае, если вы хотите пройти интерактивный курс, переходите сюда .
Пример генерации сертификатов
Чтобы сгенерировать ключ/сертификат УЦ и ключ/сертификат сервера, вы можете сделать следующее:
Сгенерировать закрытый ключ УЦ:
root@https-5f6dbcf77c-45t2m:/# openssl genrsa 2048 > /var/lib/manticore/data/ca-key.pem
Generating RSA private key, 2048 bit long modulus
...............................+++++
........+++++
e is 65537 (0x010001)
Сгенерировать самоподписанный сертификат УЦ (корневой) из закрытого ключа (здесь мы указываем "CA" как его общее имя, вы можете полностью удалить -subj и заполнить все поля):
root@https-5f6dbcf77c-45t2m:/# openssl req -new -x509 -nodes -days 365 -k
key /var/lib/manticore/data/ca-key.pem -out /var/lib/manticore/data/ca-cert.pem -subj '/CN=CA'
Сгенерировать запрос на сертификат и закрытый ключ сервера (мы указываем "127.0.0.1" как общее имя, так как мы будем запускать searchd на 127.0.0.1, вы можете удалить -subj и указать что угодно в реальной жизни):
root@https-5f6dbcf77c-45t2m:/# openssl req -newkey rsa:2048 -days 365 -no
odes -keyout /var/lib/manticore/data/server-key.pem -out /var/lib/manticore/data/server-req.pem -subj '/CN=127.0.0.1'
Generating a RSA private key
..........................................+++++
.................+++++
writing new private key to '/var/lib/manticore/data/server-key.pem'
--
---
Сгенерировать сертификат из запроса, ключа УЦ и корневого сертификата:
root@https-5f6dbcf77c-45t2m:/# openssl x509 -req -in /var/lib/manticore/data/server-req.pem -days 365 -CA /var/lib/manticore/data/ca-cert.pem -CA
Akey /var/lib/manticore/data/ca-key.pem -set_serial 01 -out /var/lib/manticore/data/server-cert.pem
Signature ok
subject=CN = 127.0.0.1
Getting CA Private Key
Проверить сертификат сервера с помощью сертификата УЦ:
root@https-5f6dbcf77c-45t2m:/# openssl verify -CAfile /var/lib/manticore/data/ca-cert.pem /var/lib/manticore/data/server-cert.pem
/var/lib/manticore/data/server-cert.pem: OK
Подключение к Manticore Search через https
Убедитесь, что ваша конфигурация Manticore Search включает необходимые параметры:
root@https-5f6dbcf77c-45t2m:/# cat /var/lib/manticore/data/manticore.conf|egrep "ssl|https"
listen = 9309:https
ssl_ca = /var/lib/manticore/data/ca-cert.pem
ssl_cert = /var/lib/manticore/data/server-cert.pem
ssl_key = /var/lib/manticore/data/server-key.pem
Запустите демон Manticore Search:
root@https-5f6dbcf77c-45t2m:/# searchd -c /var/lib/manticore/data/manticore.conf
Manticore 3.1.2 47b6bc2c@190822 release
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2019, Manticore Software LTD (http://manticoresearch.com)
using config file '/var/lib/manticore/data/manticore.conf' (415 chars)...
listening on all interfaces, port=9309
listening on all interfaces, port=9308
precaching index 'rt'
precached 1 indexes in 0.004 sec
Проверьте, что безопасное соединение работает (вы должны увидеть JSON-ответ):
root@https-5f6dbcf77c-45t2m:/# curl --cacert /var/lib/manticore/data/ca-cert.pem "https://127.0.0.1:9309/sql" -d "query=select * from rt where match('abc')";
{"took":4,"timed_out":false,"hits":{"total":0,"hits":[]}}
Сертификат УЦ должен быть предоставлен, так как мы использовали самоподписанный сертификат. Если вы не укажете правильный сертификат УЦ, это приведет к ошибке, например, давайте попробуем дать ему наш серверный сертификат вместо сертификата УЦ:
root@https-5f6dbcf77c-45t2m:/# curl --cacert /var/lib/manticore/data/server-cert.pem "https://127.0.0.1:9309/sql" -d "query=select * from rt where match('abc')";
curl: (60) SSL certificate problem: self signed certificate in certificate chain
More details here: https://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
Вы также можете полностью пропустить это, используя опцию curl -k:
root@https-5f6dbcf77c-45t2m:/# curl -k "https://127.0.0.1:9309/sql" -d "q
query=select * from rt where match('abc')"; echo
{"took":0,"timed_out":false,"hits":{"total":0,"hits":[]}}
но это менее безопасно, хотя может иметь смысл в некоторых случаях.
Вот и все. Не так уж и сложно.
