Перейти к содержанию

ГОСТ в TLS: сертификаты, согласование и диагностика

В НАЙС.ОС OpenSSL обеспечивает криптографический слой TLS. При использовании ГОСТ ключа и соответствующего сертификата сервер и клиент согласуют поддерживаемый криптографический профиль. Для успешного соединения обе стороны должны понимать алгоритмы подписи, обмена ключами и шифрования, а сертификат должен соответствовать имени и назначению сервиса.

1. Посмотреть криптографические возможности OpenSSL

openssl ciphers -v | grep -i gost
openssl list -signature-algorithms | grep -Ei 'gost|tc26'
openssl engine -t -c gost

TLS 1.2 и TLS 1.3 имеют разную модель криптографических наборов. Не путайте список openssl ciphers с возможностью согласования всех вариантов в произвольном приложении.

2. Подготовить учебный ключ и сертификат

Создайте server.key и server.crt по руководству PKI. Убедитесь, что SAN соответствует подключаемому имени, extendedKeyUsage допускает serverAuth, а открытый ключ сертификата соответствует закрытому.

3. Запустить TLS-сервер в лаборатории

openssl s_server \
  -accept 8443 \
  -cert server.crt \
  -key server.key \
  -www -state

Команда предназначена для учебного стенда и прослушивает указанный порт. Перед запуском убедитесь, что порт не доступен с недоверенной сети и правила iptables не раскрывают его наружу.

4. Проверить TLS-клиентом

openssl s_client \
  -connect 127.0.0.1:8443 \
  -servername server.example \
  -showcerts -state

Для полноценной проверки цепочки задайте доверенный учебный корень:

openssl s_client \
  -connect 127.0.0.1:8443 \
  -servername server.example \
  -CAfile root.crt \
  -verify_return_error -verify_hostname server.example

5. Что смотреть в протоколе

  • Выбранную версию TLS и алгоритмы согласования.
  • Наличие ГОСТ в реальном результате согласования, а не только в локальном списке алгоритмов.
  • Цепочку сертификатов, срок действия, SAN и EKU.
  • Проверку доверия к УЦ.
  • Сообщения unsupported signature algorithm, no shared cipher, certificate verify failed.

6. Границы совместимости

Поддержка алгоритма в библиотеке и его фактическое согласование в TLS — разные уровни. Для ГОСТ-TLS обе стороны должны использовать совместимые криптографические профили. Upstream gost-engine описывает исторические наборы ГОСТ для TLS и развитие Provider/TLS; отдельные профили требуют соответствующей интеграции с библиотекой OpenSSL.

7. Приложения Nginx и OpenVPN

Nginx и OpenVPN используют TLS, но управляются собственными конфигурациями. Ключ и сертификат должны быть доступны соответствующему процессу, а переговоры TLS — подтверждены журналом и тестовым подключением. В OpenVPN управляющий TLS-канал и канал данных используют разные параметры; см. OpenVPN с ГОСТ.

8. Как разбирать ошибки

openssl x509 -in server.crt -noout -subject -issuer -dates
openssl x509 -in server.crt -noout -text | grep -E 'DNS:|Key Usage|Signature Algorithm'
openssl verify -CAfile root.crt server.crt

Не устраняйте TLS-ошибки глобальным отключением проверки сертификатов или применением шифра NULL.