В Manticore 3.1.2 мы добавили поддержку шифрования данных при передаче между вашим приложением или другим клиентом (curl, браузером и т. д.) и демоном Manticore Search. Ее важно включить, если нужно защитить данные (запросы, ответы) от перехвата внутри локальной сети, особенно если вы подключаетесь к Manticore Search через интернет. Для настройки нужны сертификаты. Ниже приведен только пример того, как это можно сделать с самоподписанными сертификатами; возможны и другие варианты, например покупка сертификатов, подписанных настоящим центром сертификации.
В этом руководстве мы разберем, как использовать SSL при работе с Manticore Search.
Если вы хотите пройти интерактивный курс, перейдите сюда .
Пример создания самоподписанного сертификата
Чтобы создать ключ/сертификат CA и серверный ключ/сертификат, можно сделать следующее:
Создайте закрытый ключ CA:
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 (корневой) из закрытого ключа (здесь мы указываем "CA" как common name; можно полностью убрать -subj и заполнить все поля):
root@https-5f6dbcf77c-45t2m:/# openssl req -new -x509 -nodes -days 365 -key \
/var/lib/manticore/data/ca-key.pem -out /var/lib/manticore/data/ca-cert.pem -subj '/CN=CA'
Создайте запрос на сертификат и закрытый ключ сервера (мы указываем "127.0.0.1" как common name, так как будем запускать searchd на 127.0.0.1; в реальной среде можно убрать -subj и указать нужные значения):
root@https-5f6dbcf77c-45t2m:/# openssl req -newkey rsa:2048 -days 365 -nodes \
-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'
-----
Создайте сертификат из запроса, ключа CA и корневого сертификата:
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 \
-CAkey /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
Проверьте серверный сертификат с помощью сертификата CA:
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":[]}}
Сертификат CA нужно передать явно, поскольку мы используем самоподписанный сертификат. Если не указать правильный сертификат CA, команда завершится ошибкой "self signed certificate in certificate chain". Например, попробуем передать серверный сертификат вместо сертификата CA:
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 "query=select * from rt where match('abc')"; echo
{"took":0,"timed_out":false,"hits":{"total":0,"hits":[]}}
но это менее безопасно, хотя в некоторых случаях может быть оправдано.
Вот и все. Не так уж сложно.

