Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

GOST: TLS-совместимость и тестирование

Что доступно сейчас: транспортное шифрование (TLS) на ГОСТ-наборах. TDE на ГОСТ (Кузнечик/Магма для страниц/WAL/аудита) и переход контрольных сумм/SCRAM на Стрибог — roadmap, не реализованы. Эта страница — про настройку и проверку именно GOST-TLS.

Аудитория: специалисты по безопасности, DevOps, QA.


1. GOST в AngaraBase: что есть и что планируется

1.1. Транспорт (TLS) — доступно

Защита данных в канале на ГОСТ Р 34.10-2012 (открытый ключ) и наборах шифров ГОСТ 28147-89.

  • Реализация: провайдер-абстракция (OpenSSL Engine / Rustls).
  • Политика: fail-closed — сервер откажется стартовать, если настроенный GOST-провайдер недоступен.
  • Конфиг: tls.gost_enabled, tls.gost_cipher_suites.

1.2. Данные на диске (TDE) — planned

Шифрование страниц, WAL и журналов аудита блочными шифрами Кузнечик (ГОСТ 34.12-2015) или Магма — пункт roadmap. Управление ключами через внешний KMS с поддержкой ГОСТ. Сейчас не реализовано.

⚠️ Серверный TDE в текущих версиях использует XOR-keystream, а не ГОСТ-шифр и не AES/AEAD. См. Шифрование.

1.3. Целостность и аутентификация — future

Переход контрольных сумм и SCRAM с SHA-256 на Стрибог (ГОСТ Р 34.11-2012) и цифровая подпись журналов аудита — планы, не реализованы.


2. Тестирование GOST-TLS

Как убедиться, что AngaraBase действительно использует ГОСТ-наборы и строго соблюдает fail-closed.

Предусловия

Нужна Linux-среда с OpenSSL, настроенным под ГОСТ.

# Debian/Ubuntu
sudo apt-get install openssl libssl-dev libengines-gost

# Проверка доступности движка
openssl engine gost -t
# В выводе должно быть: [gost] Reference implementation of GOST engine -> [ available ]

Шаг 1. Сгенерировать ГОСТ-сертификаты

Обычные RSA/ECDSA-сертификаты не подойдут к ГОСТ-наборам — ключи нужно сгенерировать ГОСТ-алгоритмами.

# 1. Приватный ключ по ГОСТ Р 34.10-2012 (256 бит)
openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out gost_server.key

# 2. Самоподписанный сертификат
openssl req -new -x509 -days 365 \
  -key gost_server.key \
  -out gost_server.crt \
  -subj "/CN=localhost"

# 3. Проверить алгоритм сертификата
openssl x509 -in gost_server.crt -text -noout | grep "Signature Algorithm"
# Ожидается: Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)

Шаг 2. Настроить AngaraBase

Включить TLS и ГОСТ-режим. Чтобы проверить строгий режим, убедитесь, что allow_insecure выключен.

export ANGARABASE_TLS_ENABLE=1
export ANGARABASE_TLS_CERT_PATH=$(pwd)/gost_server.crt
export ANGARABASE_TLS_KEY_PATH=$(pwd)/gost_server.key
export ANGARABASE_TLS_GOST_ENABLED=1
export ANGARABASE_TLS_GOST_CIPHER_SUITES="GOST2012-GOST8912-GOST8912"

./angarabase-server --config-path ./angarabase.conf

tls.gost_enabled по умолчанию выключен (явный opt-in); дефолтный набор — GOST2012-GOST8912-GOST8912:GOST2001-GOST89-GOST89.

Шаг 3. Позитивная проверка

Подключитесь клиентом с поддержкой ГОСТ (например, openssl s_client или пропатченный psql).

openssl s_client -connect localhost:5152 -servername localhost

Чек-лист:

  1. В выводе есть Cipher : GOST2012-GOST8912-GOST8912 (или другой ГОСТ-набор).
  2. Protocol : TLSv1.2.
  3. Handshake завершается успешно.

Через SQL (если клиент поддерживает):

SELECT name, value FROM sys.settings WHERE name LIKE 'tls.%';
-- Проверьте, что tls.gost_enabled = 'true'

Шаг 4. Проверка fail-closed (негативные тесты)

Убедитесь, что сервер отказывается стартовать при сломанном окружении.

  1. Нет провайдера. Временно отключите ГОСТ-движок (переименуйте библиотеку или измените конфиг OpenSSL) и запустите с ANGARABASE_TLS_GOST_ENABLED=1. → Ожидается: отказ старта с «GOST provider not available».
  2. Невалидный набор шифров. ANGARABASE_TLS_GOST_CIPHER_SUITES="INVALID-CIPHER". → Ожидается: отказ старта с ошибкой конфигурации.
  3. RSA-сертификат с ГОСТ-наборами. ANGARABASE_TLS_GOST_ENABLED=1, но обычные RSA-сертификаты. → Ожидается: провал handshake («no shared cipher» / «wrong signature type»).

3. Диагностика

СимптомВероятная причинаРешение
no shared cipherклиент без ГОСТ или у сервера RSA-сертификатыпоставьте libengines-gost на клиенте; ГОСТ-сертификаты на сервере
wrong signature typeнесовпадение типа ключа сертификатаиспользуйте gost2012_256 при генерации ключа
Сервер не стартуетopenssl.cnf не настроен под ГОСТпроверьте openssl engine gost -t

Дальше

После того как вы определились, какие GOST-сценарии вам нужны: