Шифрование трафика¶
Tarantool DB позволяет шифровать трафик по IPROTO при запросах от клиента и при репликации.
В этом руководстве описано, как включить шифрование на стороне кластера Tarantool DB, а также создать шифрованные соединения из коннекторов на Go и Python.
Документацию по шифрованию трафика можно найти в документации Tarantool Enterprise.
Руководство включает следующие шаги:
Пререквизиты¶
Для выполнения примера требуются:
установленный Docker-образ Tarantool DB;
приложение Docker compose;
утилита TT CLI;
Go версии 1.13 или выше;
python3;
исходные файлы примера
traffic_encryption
.Примечание
Есть два способа получить исходные файлы примера:
Архив с полной документацией Tarantool DB, полученный по почте или скачанный в личном кабинете tarantool.io. Пример архива:
tarantooldb-documentation-0.8.0.tar.gz
. Примерtraffic_encryption
расположен в таком архиве в директории./doc/examples/traffic_encryption/
.Отдельный архив traffic_encryption.tar.gz, скачанный c сайта Tarantool.
Настройка SSL-шифрования¶
Для работы с SSL в Tarantool используются SSL-сертификаты. Экземпляр Tarantool DB здесь – это одновременно и сервер, и клиент по отношению к другим экземплярам. Чтобы любой экземпляр мог подключаться ко всем остальным экземплярам, для каждого экземпляра требуется как сертификат сервера, так и сертификат клиента. Это означает, что для экземпляра кластера всегда нужно передавать как серверные, так и клиентские аргументы.
В примере traffic_encryption
сертификаты находятся в директории ./bootstrap/
и
должны быть доступны для каждого экземпляра.
Сертификаты генерируются с помощью скрипта ./bootstrap/gen.sh
.
В примере заданы параметры SSL-шифрования для экземпляра с помощью переменных окружения:
environment:
- TARANTOOL_ADVERTISE_URI=tarantool-router:3301
- TARANTOOL_TRANSPORT=SSL
- TARANTOOL_SSL_SERVER_CA_FILE=/bootstrap/ca-cert.pem
- TARANTOOL_SSL_SERVER_CERT_FILE=/bootstrap/server-cert.pem
- TARANTOOL_SSL_SERVER_KEY_FILE=/bootstrap/server-key.pem
- TARANTOOL_SSL_CLIENT_CA_FILE=/bootstrap/ca-cert.pem
- TARANTOOL_SSL_CLIENT_CERT_FILE=/bootstrap/client-cert.pem
- TARANTOOL_SSL_CLIENT_KEY_FILE=/bootstrap/client-key.pem
- TARANTOOL_SSL_SERVER_PASSWORD=12345
- TARANTOOL_SSL_CLIENT_PASSWORD=54321
Здесь:
TARANTOOL_ADVERTISE_URI
– адрес и порт, на котором узел доступен в кластере;TARANTOOL_TRANSPORT
– значение SSL;TARANTOOL_SSL_SERVER_CA_FILE
– путь к корневому сертификату сервера;TARANTOOL_SSL_SERVER_CERT_FILE
– путь к сертификату сервера;TARANTOOL_SSL_SERVER_KEY_FILE
– путь к закрытому ключу сервера;TARANTOOL_SSL_CLIENT_CA_FILE
– путь к корневому сертификату клиента;TARANTOOL_SSL_CLIENT_CERT_FILE
– путь к сертификату клиента;TARANTOOL_SSL_CLIENT_KEY_FILE
– путь к закрытому ключу клиента;TARANTOOL_SSL_SERVER_PASSWORD
– пароль для ключа сервера;TARANTOOL_SSL_CLIENT_PASSWORD
– пароль для ключа клиента.
Подключение к узлу с помощью клиентских сертификатов¶
Перейдите в папку с примером traffic_encryption
и запустите стенд:
cd ./doc/examples/traffic_encryption/
docker compose up
Попытайтесь подключиться к экземпляру, используя команду tt connect
:
tt connect admin:secret-cluster-cookie@localhost:3300
Ответ будет выглядеть так:
• Connecting to the instance...
⨯ failed to run interactive console: failed to create new console: failed to connect: failed to get protocol: failed to read Tarantool greeting: read tcp [::1]:62950->[::1]:3300: i/o timeout
Подключитесь к узлу снова, используя клиентские сертификаты:
tt connect admin:secret-cluster-cookie@localhost:3300 --sslkeyfile ./bootstrap/client-key.pem --sslcertfile ./bootstrap/client-cert.pem
После ввода команды в терминале появится сообщение Enter PEM pass phrase
. Введите пароль для ключа клиента:
54321
При успешном подключении ответ будет выглядеть так:
• Connecting to the instance...
Enter PEM pass phrase:
• Connected to localhost:3300
localhost:3300>
Подключение через Go-коннектор¶
В этом разделе описано подключение к экземпляру Tarantool DB через Go-коннектор.
Пример расположен в директории ./go/
примера traffic_encryption
.
Запустите кластер:
docker compose up
Перейдите в директорию с примером Go-коннектора и запустите его:
cd go && go run main.go
Код подключения выглядит так:
dialer := tarantool.OpenSslDialer{
Address: "localhost:3300",
User: "admin",
Password: "secret-cluster-cookie",
SslKeyFile: "../bootstrap/client-key.pem",
SslCertFile: "../bootstrap/client-cert.pem",
SslCaFile: "../bootstrap/ca-cert.pem",
SslPassword: "54321",
}
opts := tarantool.Opts{}
conn, err := tarantool.Connect(ctx, dialer, opts)
if err != nil {
fmt.Println(err)
return
}
Опции здесь аналогичны опциям, которые передавались для tt
.
Подключение через Python-коннектор¶
В разделе описано подключение к экземпляру Tarantool DB через Python-коннектор.
Пример расположен в директории ./python/
примера traffic_encryption
.
Перейдите в директорию с примером Python-коннектора:
cd python
Установите зависимости:
./bootstrap.sh
Запустите пример:
python connect.py
Пример выполнения:
(venv) python connect.py
- '2.11.2-0-g94f8b6aad-r609-gc64'
Код подключения выглядит так:
con = tarantool.Connection(
'localhost',
3300,
user="admin",
password="secret-cluster-cookie",
transport='ssl',
ssl_key_file='../bootstrap/client-key.pem',
ssl_cert_file='../bootstrap/client-cert.pem',
ssl_ca_file='../bootstrap/ca-cert.pem',
ssl_password='54321',
connection_timeout=0.5,
socket_timeout=0.5,
)