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
Чек-лист:
- В выводе есть
Cipher : GOST2012-GOST8912-GOST8912(или другой ГОСТ-набор). Protocol : TLSv1.2.- Handshake завершается успешно.
Через SQL (если клиент поддерживает):
SELECT name, value FROM sys.settings WHERE name LIKE 'tls.%';
-- Проверьте, что tls.gost_enabled = 'true'
Шаг 4. Проверка fail-closed (негативные тесты)
Убедитесь, что сервер отказывается стартовать при сломанном окружении.
- Нет провайдера. Временно отключите ГОСТ-движок (переименуйте библиотеку
или измените конфиг OpenSSL) и запустите с
ANGARABASE_TLS_GOST_ENABLED=1. → Ожидается: отказ старта с «GOST provider not available». - Невалидный набор шифров.
ANGARABASE_TLS_GOST_CIPHER_SUITES="INVALID-CIPHER". → Ожидается: отказ старта с ошибкой конфигурации. - 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-сценарии вам нужны:
- GOST crypto setup — пошаговая установка криптопровайдера и переключение профиля.
- Шифрование (TDE + клиентское) — общий контракт TDE и клиентского шифрования.
- Аудит — как замкнуть GOST-подписи на audit-chain.
- Hardening runbook — финальный чек-лист перед production.