В 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” в качестве общего имени, вы можете полностью удалить -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'
--
---
Сгенерировать сертификат из запроса, ключа 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 -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
Проверить сертификат сервера с помощью сертификата 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, он не сработает, например, попробуем использовать наш серверный сертификат вместо сертификата 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 "q
query=select * from rt where match('abc')"; echo
{"took":0,"timed_out":false,"hits":{"total":0,"hits":[]}}
но это менее безопасно, однако может иметь смысл в некоторых случаях.
Вот и все. Не так уж и сложно.