TDB Documentation portal logo
Помощь
Обновлена 30 июля 2026 г. в 16:49

Шифрование трафика

Tarantool DB позволяет шифровать трафик по IPROTO при запросах от клиента и при репликации.

В этом руководстве описано, как включить шифрование на стороне кластера Tarantool DB, а также создать шифрованные соединения из коннекторов на Go и Python.

Документацию по шифрованию трафика можно найти в документации Tarantool Enterprise.

Руководство включает следующие шаги:

Пререквизиты

Для выполнения примера требуются:

  • установленный Docker-образ Tarantool DB;

  • приложение Docker compose;

  • утилита TT CLI;

  • Go версии 1.13 или выше;

  • python3;

  • исходные файлы примера traffic_encryption.

Настройка SSL-шифрования

Для работы с SSL в Tarantool используются SSL-сертификаты. Экземпляр Tarantool DB здесь — это одновременно и сервер, и клиент по отношению к другим экземплярам. Чтобы любой экземпляр мог подключаться ко всем остальным экземплярам, для каждого экземпляра требуется как сертификат сервера, так и сертификат клиента. Это означает, что для экземпляра кластера всегда нужно передавать как серверные, так и клиентские аргументы.

В примере traffic_encryption сертификаты генерируются с помощью скрипта ./certs/gen.sh. Сгенерированные сертификаты находятся в директории ./certs/ и должны быть доступны для каждого экземпляра.

В примере заданы параметры SSL-шифрования для экземпляра с помощью переменных окружения:

environment:  - TARANTOOL_ADVERTISE_URI=tarantool-router:3301  - TARANTOOL_ALIAS=router-1  - TARANTOOL_TRANSPORT=SSL  - TARANTOOL_SSL_SERVER_CA_FILE=/certs/ca-cert.pem  - TARANTOOL_SSL_SERVER_CERT_FILE=/certs/server-cert.pem  - TARANTOOL_SSL_SERVER_KEY_FILE=/certs/server-key.pem  - TARANTOOL_SSL_CLIENT_CA_FILE=/certs/ca-cert.pem  - TARANTOOL_SSL_CLIENT_CERT_FILE=/certs/client-cert.pem  - TARANTOOL_SSL_CLIENT_KEY_FILE=/certs/client-key.pem

Здесь:

  • 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 — путь к закрытому ключу клиента.

Подключение к узлу с помощью клиентских сертификатов

Перейдите в папку с примером traffic_encryption, сгенерируйте сертификаты, а затем запустите стенд:

cd ./docs/docs/ru/assets/examples/traffic_encryption/cd certs && ./gen.shcd .. && docker compose up -d

Попытайтесь подключиться к экземпляру, используя команду 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 ./certs/client-key.pem --sslcertfile ./certs/client-cert.pem

При успешном подключении ответ будет выглядеть так:

• Connecting to the instance...   • Connected to localhost:3300localhost:3300>

Подключение через Go-коннектор

В этом разделе описано подключение к экземпляру Tarantool DB через Go-коннектор. Пример расположен в директории ./go/ примера traffic_encryption.

Для запуска выполните из папки примера следующие команды:

docker build -t traffic-encryption-go -f go/Dockerfile ./godocker run -t --rm -v "$(pwd)/certs:/traffic_encryption/go/certs" --network traffic_encryption_tarantooldb_network traffic-encryption-go

Go-клиент подключится к узлу через коннектор с шифрованием и запросит текущую версию платформы Tarantool. Ответ может выглядеть так:

Tarantool 2.11.6 (Binary) 67c35ab2-c334-49b6-a7a4-f617c81bccaa

Код подключения выглядит так:

dialer := tarantool.OpenSslDialer{    Address:     "tarantool-router:3301",    User:        "admin",    Password:    "secret-cluster-cookie",    SslKeyFile:  "./certs/client-key.pem",    SslCertFile: "./certs/client-cert.pem",    SslCaFile:   "./certs/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

Запустите пример:

source venv/bin/activatepython connect.py

Пример выполнения:

(venv) python connect.py - '2.11.6-0-ga5fc633b2'

Код подключения выглядит так:

con = tarantool.Connection(    'localhost',    3300,    user="admin",    password="secret-cluster-cookie",    transport='ssl',    ssl_key_file='../certs/client-key.pem',    ssl_cert_file='../certs/client-cert.pem',    ssl_ca_file='../certs/ca-cert.pem',    connection_timeout=0.5,    socket_timeout=0.5,)