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

Version:

latest
Руководство администратора Шифрование трафика

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

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,
)

Found what you were looking for?
Feedback